永发信息网

怎么用C语言遍历文件啊?

答案:3  悬赏:50  手机版
解决时间 2021-02-14 05:50
怎么用C语言遍历文件啊?
最佳答案
三种方法可以实现:

1 按字节遍历:
逐个字节读取文件,达到遍历的效果。
int c;
while((c = fgetc(fp)) != EOF) //读取每个字节,fp为打开的文件指针。
{
//对c做一些操作。 c就是遍历中的每个字节。

}

2 按行遍历:
利用fgets,逐行读取文件进行遍历。
char buf[1024];
while(fgets(buf)) //逐行读取文件。
{
//对buf做操作,buf为每一行的数据。

}

3 将文件整个读到内存,按照字符数组进行遍历。
可以将文件整体读到内存,对内存空间进行多样化遍历,这种方式适用于文件比较小,且遍历次数较多的情况,可以提高效率。
读取文件可以采用1中的逐个字节读取的方式,存到内存空间。
全部回答
struct ffblk { char ff_resrved[2]; //DOS使用 char ff_attrib; //文件属性 int ff_ftime; //创建时间 int ff_fdate; //创建日期 long ff_fsize; //文件大小 char ff_name[13]; //文件名 } #include #include { struct ffblk file; register int done; done = findfirst("c:\\TC\\*.c",&file,0); //搜索TC下所有.c文件 while(!done) { printf("%s\n",file.ff_name); done = findnext(&file) } getch(); }
#include #include #include #include #include #include #include #include #include "pm03a.h" void main(int argc,char* argv[]) { //printf("Number %d\n",ConfirmFileAttrib(argv[1])); GetDirectory(argv[1]); printf("\nSearch Over.\n"); } //------------------------------------------------------------------ //pm03a.h //------------------------------------------------------------------ void GetDirectory(char *DirectoryName); int ConfirmFileAttrib(char* filename); char *GetCurrentPath(); char* GetFullFileName(char *filename); char *WillDeleteFile(char *FileName); //-------------------------------------------------------- //--------------- 获得文件属性 --------------------------- //-------------------------------------------------------- int ConfirmFileAttrib(char* filename) { int temp=0; int attrib=(_rtl_chmod(filename,0)); if(attrib==-1) { switch(errno) { case ENOENT: //printf("%s Path or file not found.\n",filename); temp=0; break; case EACCES: //printf("Permission denied.\n"); temp=-1; break; default: //printf("Error number: %d", errno); temp=-2; break; } } else { if(attrib & FA_RDONLY) { temp=1; //printf("%s is read-only.\n", filename); } if(attrib & FA_HIDDEN) { temp=2; //printf("%s is hidden.\n", filename); } if(attrib & FA_SYSTEM) { temp=3; //printf("%s is a system file.\n", filename); } if(attrib & FA_DIREC) { temp=4; //printf("%s is a directory.\n", filename); } if (attrib & FA_ARCH) { temp=5; //printf("%s is an archive file.\n", filename); } } return temp; } //-------------------------------------------------------- //-------------------------------------------------------- //--------------- 获取目录流 ----------------------------- //-------------------------------------------------------- void GetDirectory(char *DirectoryName) { DIR* Directory_Point; struct dirent *entry; bool DirControl; if((Directory_Point=opendir(DirectoryName))==NULL) { printf("Error opening directory!\n"); return; } else { if(strcmp(DirectoryName,"..")==0) { return; } if(strcmp(DirectoryName,".")==0) DirControl=true; else DirControl=false; chdir(DirectoryName); //char *filename=DirectoryName; //int k=creat(strcat(filename,".txt"),S_IWRITE); while(bool(entry=readdir(Directory_Point))) { if(ConfirmFileAttrib(entry->d_name)==5) // 确定为文件属性 { // 文件过滤 WillDeleteFile(entry->d_name); } if(ConfirmFileAttrib(entry->d_name)==4) // 确定为目录属性 { if(strcmpi(entry->d_name,"..")==0||strcmpi(entry->d_name,".")==0) { continue; } else { //printf("\n%s is direct\n\n",entry->d_name); GetDirectory(entry->d_name); } } } if(!DirControl==true) chdir(".."); closedir(Directory_Point); } } //-------------------------------------------------------- //-------------------------------------------------------- //---------- 判断文件类型以备过滤 ------------------------ //-------------------------------------------------------- char* GetFullFileName(char *filename) { char *FullFilename=GetCurrentPath(); if(strlen(FullFilename)<=3) { strcat(FullFilename,filename); } else { strcat(FullFilename,"\\"); strcat(FullFilename,filename); } return FullFilename; } char *GetCurrentPath() { char path[1024]=""; strcpy(path, "X:\\"); path[0] = 'A' + getdisk(); getcurdir(0, path+3); return path; } char *WillDeleteFile(char *FileName) { int len; for(len=strlen(FileName);len>=0;len--) { if(FileName[len]=='.') break; } char* Retname; int s=-1; for(int i=len;i<=strlen(FileName);i++) { Retname[s+=1]=FileName[i]; } int i=-1; if(Retname[1]=='~')i=0; if(strcmpi(Retname,".bak")==0)i=0; if(strcmpi(Retname,".obj")==0)i=0; if(strcmpi(Retname,".tds")==0)i=0; if(strcmpi(Retname,".dcu")==0)i=0; if(strcmpi(Retname,".tmp")==0)i=0; if(strcmpi(Retname,".ilk")==0)i=0; if(strcmpi(Retname,".pch")==0)i=0; if(strcmpi(Retname,".pdb")==0)i=0; if(strcmpi(Retname,".tlb")==0)i=0; if(strcmpi(Retname,".idb")==0)i=0; if(strcmpi(Retname,".pdb")==0)i=0; if(strcmpi(Retname,".r$p")==0)i=0; if(strcmpi(Retname,".OBR")==0)i=0; if(strcmpi(Retname,".mbt")==0)i=0; if(strcmpi(Retname,".mrt")==0)i=0; if(strcmpi(Retname,".csm")==0)i=0; if(i==0) { remove(GetFullFileName(FileName)); printf("%s delete\n",GetFullFileName(FileName)); } return Retname; }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
句容环保电动汽车经营部地址在什么地方,我要
百度手机游戏阴阳师怎么在电脑上玩
燕窝有分类吗?看到价格有些相差真的大,哪个
如果没有太阳,那么无法在地球上生存的是CA.
胜诉获得200万的返还税款,诉讼基本确定能获
宏业五金电器经营部我想知道这个在什么地方
比喻善于溜须拍马的人是什么狗
这叫什么螺丝啊?
雷克萨斯句容地址在什么地方,我要处理点事
电脑显卡好坏怎么区分
火柴梗的梗在字典里是哪种意思
用哪个快递邮寄十本书最划算?
某服装厂做上衣1500件,计划每天做150件。3天
大通6坐的高速怎么收费,和小车一样吗
一汽解放专营地址在哪,我要去那里办事
推荐资讯
美丽·话题国际美容连锁在什么地方啊,我要过
哪些行为支持低碳生活
极品飞车9evo漂移时侧翻
有家网吧地址在什么地方,我要处理点事
美国爱康跑步机屏幕上显示SB是什么问题
好味道小吃店在什么地方啊,我要过去处理事情
为什么3系的内饰比C差那么多还有这
君成宾馆(君山大道)地址在什么地方,想过去办
德大生物工程公司地址在哪,我要去那里办事
张北到宝昌车都有几点
余姚凯迪汽车销售服务有限公司地址在什么地方
帮忙起一些类似这些名称,例如:凤帝之女
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?