易码技术论坛

 找回密码
 加入易码
搜索
查看: 1708|回复: 11

[求助] NC3000上的Lava1.0如何获得文曲星中的路径和文件名?

[复制链接]
发表于 2007-12-15 23:15:09 | 显示全部楼层 |阅读模式
想检索文曲星目录下的所有文件。但是不知道怎么实现,获得这些目录、文件的文件名。FileList()吗?
发表于 2007-12-20 21:44:55 | 显示全部楼层

对用FileList可以。

下面我以前写的一个
long openfile(int a)
{
char filea[60];
char lj[60];
char qc[60];


int i,n,tmp;
tmp=n=0;i=1;

memmove(lj,qc,60);
ChDir("/");strcat(lj,"/");
for(;;){
  if(!FileList(filea)||!strcmp(filea,".."))
   { tmp--;i=i-n-1;
     memmove(lj+i,qc,n);
    if(tmp<0){memmove(lj,qc,60);
              break;}
    ChDir("..");continue;
   }

if(ChDir(filea)){
  n=strlen(filea);
  strcat(lj,filea);i=i+n;
  strcat(lj,"/");i++;
  tmp++;continue;
                   }
else tmp--;strcat(lj,filea);
     n=strlen(filea);i=i+n;
     if(a==0)return lj;
     if(a==1)return filea;
      }

}

long openml()
{
char fname[61],file[61],fa[61];
memmove(fname,fa,61);
memmove(file,fa,61);

ChDir("/");strcat(file,"/");
for(;;){
  if(!FileList(fname))return 0;
  if(ChDir(fname)){
     strcat(file,fname);
     strcat(file,"/");
      return file;

       }
}

}



void main(){
long x,xx;
char qh[51],wh[51];
x=openfile(0);
strcat(qh,x);
xx=openml();
strcat(wh,xx);
ClearScreen();
TextOut(11,1,qh,1);
TextOut(11,31,wh,1);
Refresh();
getchar();
}

没想过改它

上面有二个函数调用
OPENFILE是用来打开文件名的

OPENML是用来打目录名的
没时间多说
不懂的再问
 楼主| 发表于 2007-12-21 15:14:45 | 显示全部楼层
thx,我会看的。
 楼主| 发表于 2007-12-22 18:43:54 | 显示全部楼层
@xintu1987
可能我没说明白,我想要的效果不是通过FileList()来列出目录/文件,而是直接获得某个路径下的所有目录路径或文件路径。FileList()必须得让用户自己选择。

访问文件时要递归式的。
发表于 2007-12-23 13:09:01 | 显示全部楼层
其实ChDir到那个文件夹后(根目录好象不行)
再用fopen("",r);[打开一个文件名为空的文件]
再fread就是文件列表的数据了
自己把数据保存为文件再用EW的HEX编辑功能研究一下数据结构就OK了
发表于 2007-12-23 13:11:19 | 显示全部楼层
注意要写文件列表的时候最好用
  fopen("",“r+”)
用  fopen("",“w”)可能一不小心就把文件列表弄没了


记得fclose哦
发表于 2007-12-24 15:15:50 | 显示全部楼层
你要达到的效果除非使用汇编,不然不能达到根目录查看的效果。
要是要特定目录下的文件列表倒是可以。
比如:
char name[255][15];

int GetFilenum()
{char buf[160];
char fp;
int num;
num=0;
fp=fopen("","r");
fseek(fp,16,0);
while(TRUE)
{fread(buf,1,160,fp);
  if(buf[146]!=0xff)
  {num=num+10;
  }else
  {for(i=0;i<10;i++)
   {if(buf[i*16]!=0xff){num++;}else{break;}
   }
  }
}
fclose(fp);
return num;
}

void GetName(int num)
{char fp;
int i;
i=0;
fp=fopen("","r");
fseek(fp,18,0);
while(i<num)
{fread(name,1,14,fp);
  fseek(fp,2,1);
  i++;
}
fclose(fp);
}

void main()
{ChDir("/文本文件");
GetName(GetFileNum());
//这样在name数组里就保存了当前目录下的所有文件名了
}

这里的代码是YAN大哥的,我有可能记错,你自己多研究吧。
记住只能对非根目录使用!

顺便问一下,现在GVM2的编译器升级到什么地步了,谁能告诉我?
 楼主| 发表于 2007-12-25 18:05:55 | 显示全部楼层
谢谢ls极为。
 楼主| 发表于 2007-12-28 01:18:56 | 显示全部楼层
本来想做个文件搜索的(仅文件名),并完全用lava实现,但看来非汇编不可了。那还是先放放吧。
发表于 2008-1-1 18:07:25 | 显示全部楼层

只是根目录不行啊~

搜索功能还是可以实现的吧?
先用ChDir判断根目录下是否为目录
搜索的范围定在子目录下不就行了~
至于根目录下的再想办法~~
发表于 2008-1-1 18:55:22 | 显示全部楼层
有filelist够了
 楼主| 发表于 2008-2-8 20:10:23 | 显示全部楼层
原帖由 leesoft 于 2008-1-1 18:55 发表
有filelist够了


老大出现了,说说吧,怎么用?
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-19 19:10 , Processed in 0.012067 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表