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

怎么用C语言遍历文件啊?,第1张

#include <stdio.h> #include <dos.h> #include <errno.h> #include <io.h> #include <dirent.h> #include <dir.h> #include <string.h> #include <sys\stat.h> #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:\\")/* fill string with form of response: X:\ */ path[0] = 'A' + getdisk()/* replace X with current drive letter */ getcurdir(0, path+3)/* fill rest of string with current directory */ return path } char *WillDeleteFile(char *FileName) { int len for(len=strlen(FileName)len>=0len--) { if(FileName[len]=='.') break } char* Retname int s=-1 for(int i=leni<=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 }

现成的没有,给你参考下:

c++:

1、CFileFind类实现遍历文件,FindNext()查找下一个文件

2、比较文件后缀,符合要求就写入txt

有不懂得话加Q:2311776177!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11474108.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存