怎么用C语言遍历文件啊?
答案:3 悬赏:50 手机版
解决时间 2021-02-14 05:50
- 提问者网友:niaiwoma
- 2021-02-13 20:57
怎么用C语言遍历文件啊?
最佳答案
- 五星知识达人网友:有你哪都是故乡
- 2021-02-13 21:14
三种方法可以实现:
1 按字节遍历:
逐个字节读取文件,达到遍历的效果。
int c;
while((c = fgetc(fp)) != EOF) //读取每个字节,fp为打开的文件指针。
{
//对c做一些操作。 c就是遍历中的每个字节。
}
2 按行遍历:
利用fgets,逐行读取文件进行遍历。
char buf[1024];
while(fgets(buf)) //逐行读取文件。
{
//对buf做操作,buf为每一行的数据。
}
3 将文件整个读到内存,按照字符数组进行遍历。
可以将文件整体读到内存,对内存空间进行多样化遍历,这种方式适用于文件比较小,且遍历次数较多的情况,可以提高效率。
读取文件可以采用1中的逐个字节读取的方式,存到内存空间。
1 按字节遍历:
逐个字节读取文件,达到遍历的效果。
int c;
while((c = fgetc(fp)) != EOF) //读取每个字节,fp为打开的文件指针。
{
//对c做一些操作。 c就是遍历中的每个字节。
}
2 按行遍历:
利用fgets,逐行读取文件进行遍历。
char buf[1024];
while(fgets(buf)) //逐行读取文件。
{
//对buf做操作,buf为每一行的数据。
}
3 将文件整个读到内存,按照字符数组进行遍历。
可以将文件整体读到内存,对内存空间进行多样化遍历,这种方式适用于文件比较小,且遍历次数较多的情况,可以提高效率。
读取文件可以采用1中的逐个字节读取的方式,存到内存空间。
全部回答
- 1楼网友:话散在刀尖上
- 2021-02-13 22:37
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(); }
- 2楼网友:执傲
- 2021-02-13 22:01
#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; }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯