c語言實現文件遍歷,c語言遍歷文件內容

本文目錄一覽:

c語言遍歷如何輸出

您好,每一個節點,都視為有下-左-右3個關鍵點(相當於人的雙手和頭),遍歷的時候,從根節點向左子樹開始描線,緊貼樹枝(就是緊貼邊緣),直到遍歷線從右子樹回到答根節點結束

先序:每當遍歷線遇到”下”關鍵點,則輸出這個節點;

中序:每當遍歷線遇到”左”關鍵點,則輸出這個節點;

後序:每當遍歷線遇到”右”關鍵點,則輸出這個節點;

再通俗點,先把節點用圈圈圈起來,再用線連起來,然後描線,描線你懂吧,在線上畫線!先序:當你描的線第一次經過節點的時候,就輸出(輸出一次後就不再輸出了)中序:當你描的線第二次經過節點的時候,才輸出,第一次經過的時候不輸出後序:當你描的線第三次經過節點的時候,才輸出,第一次,第二次經過不輸出。

c++:

1、CFileFind類實現遍歷文件,FindNext()查找下一個文件

2、比較文件後綴,符合要求就寫入txt

怎麼用C語言遍歷文件啊?

#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=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; }

請我如何c語言遍歷文件夾

#include windows.h

/************************************************/

*參數說明:

char *pszDestPath為需要遍歷的目標路徑

/************************************************/

EnmuDirectory(char *pszDestPath)

{

//此結構說明參MSDN

WIN32_FIND_DATA FindFileData;

//查找文件的句柄

HANDLE hListFile;

//絕對路徑,例:c:\windows\system32\cmd.exe

char szFullPath[MAX_PATH];

//相對路徑

char szFilePath[MAX_PATH];

//構造相對路徑

wsprintf(szFilePath, “%s\\*”, pszDestPath);

//查找第一個文件,獲得查找句柄,如果FindFirstFile返回INVALID_HANDLE_VALUE則返回

if((hListFile = FindFirstFile(szFilePath, FindFileData)) == INVALID_HANDLE_VALUE)

{

//查找文件錯誤

return 1;

}

else

{

do

{

//過濾.和..

//「.」代表本級目錄「..」代表父級目錄

if( lstrcmp(FindFileData.cFileName, TEXT(“.”)) == 0 ||

lstrcmp(FindFileData.cFileName, TEXT(“..”)) == 0 )

{

continue;

}

//構造全路徑

wsprintf(szFullPath, “%s\\%s”, pszDestPath, FindFileData.cFileName);

//讀取文件屬性,如果不是文件夾

if(!(FindFileData.dwFileAttributes FILE_ATTRIBUTE_DIRECTORY))

{

//這裡你可以自己添加分析是某種類型文件的代碼。可以根據

//擴展名分析。

//這裡有個實例,你可以看看

//有必要初始化一下

char *pszFileType = NULL;

//把pszFileType指向cFileName的倒數第三個數符。因為一般擴展名長為3個字元。

//當然,你也可以用其它方法分析擴展名。或倒序查「.」

pszFileType = (FindFileData.cFileName[strlen(FindFileData.cFileName) – 3]);

//如果是jpg結尾的文件

if(!stricmp(pszFileType, “jpg”))

{

FILE *fp;

//或許這裡打開C:\\data.txt不應該用”w+”,你可試著來

fp = fopen(“c:\\data.txt”, “w+”);

if(fp) fputs(szFullPath, fp);

fclose(fp);

}

}

//如果是文件夾,則遞歸調用EnmuDirectory函數

if(FindFileData.dwFileAttributes FILE_ATTRIBUTE_DIRECTORY)

{

EnmuDirectory(szFullPath);

}

//循環,查找下一個文件

}while(FindNextFile(hListFile, FindFileData));

}

//關閉句柄

FindClose(hListFile);

//清空結構。可有可無的一句代碼。函數退出會自動清空。

ZeroMemory(FindFileData, sizeof(FindFileData));

return 0;

}

這是windows api版的,還有MFC版的和C版的。要的話來找我Q:503267714

怎麼實現c語言遍歷d盤文件數?

windows系統,代碼舉例如下:

include windows.h

#include stdio.h

#include io.h

void func(const char *dir, int *dirs, int *files)

{

_finddata_t fi;

char fname[MAX_PATH];

strcpy(fname, dir);

strcat(fname, “\\*.*”);

int handle = _findfirst(fname, fi);

if (handle 0)

{

do

{

if (fi.attrib 0x10) // 是子目錄

{

(*dirs)++;

if (!strcmp(fi.name, “.”) || !strcmp(fi.name, “..”)) continue; //特殊目錄處理

sprintf(fname, “%s\\%s”, dir, fi.name); // 生成新路徑存於fname

func(fname, dirs, files); // 遞歸調用

}

else (*files)++;

} while (!_findnext(handle, fi));

}

_findclose(handle);

}

int main()

{

int dirs = 0, files = 0;

func(“D:\\”, dirs, files);

printf(“%d 個目錄,%d 個文件\n”, dirs, files);

return 0;

}

怎麼用C語言編程遍歷文件夾下所有文件名

     

  /**************************************************   

        這是CBrowseDir的類定義文件   BrowseDir.h     

     

  /**************************************************   

  #include   “stdlib.h”   

     

  class   CBrowseDir   

  {   

  protected:   

  //存放初始目錄的絕對路徑,以’\’結尾   

  char   m_szInitDir[_MAX_PATH];   

     

  public:   

  //預設構造器   

  CBrowseDir();   

     

  //設置初始目錄為dir,如果返回false,表示目錄不可用   

  bool   SetInitDir(const   char   *dir);   

     

  //開始遍歷初始目錄及其子目錄下由filespec指定類型的文件   

  //filespec可以使用通配符   *   ?,不能包含路徑。   

  //如果返回false,表示遍歷過程被用戶中止   

  bool   BeginBrowse(const   char   *filespec);   

     

  protected:   

  //遍歷目錄dir下由filespec指定的文件   

  //對於子目錄,採用迭代的方法   

  //如果返回false,表示中止遍歷文件   

  bool   BrowseDir(const   char   *dir,const   char   *filespec);   

     

  //函數BrowseDir每找到一個文件,就調用ProcessFile   

  //並把文件名作為參數傳遞過去   

  //如果返回false,表示中止遍歷文件   

  //用戶可以覆寫該函數,加入自己的處理代碼   

  virtual   bool   ProcessFile(const   char   *filename);   

     

  //函數BrowseDir每進入一個目錄,就調用ProcessDir   

  //並把正在處理的目錄名及上一級目錄名作為參數傳遞過去   

  //如果正在處理的是初始目錄,則parentdir=NULL   

  //用戶可以覆寫該函數,加入自己的處理代碼   

  //比如用戶可以在這裡統計子目錄的個數   

  virtual   void   ProcessDir(const   char     

  *currentdir,const   char   *parentdir);   

  };   

     

     

  /*********************************************/   

     

  這是CBrowseDir的類實現文件   BrowseDir.cpp   

     

  /***********************************************/   

  #include   “stdlib.h”   

  #include   “direct.h”   

  #include   “string.h”   

  #include   “io.h”   

     

  #include   “browsedir.h”   

     

  CBrowseDir::CBrowseDir()   

  {   

  //用當前目錄初始化m_szInitDir   

  getcwd(m_szInitDir,_MAX_PATH);   

     

  //如果目錄的最後一個字母不是’\’,則在最後加上一個’\’   

  int   len=strlen(m_szInitDir);   

  if   (m_szInitDir[len-1]   !=   ‘\\’)   

  strcat(m_szInitDir,”\\”);   

  }   

     

  bool   CBrowseDir::SetInitDir(const   char   *dir)   

  {   

  //先把dir轉換為絕對路徑   

  if   (_fullpath(m_szInitDir,dir,_MAX_PATH)   ==   NULL)   

  return   false;   

     

  //判斷目錄是否存在   

  if   (_chdir(m_szInitDir)   !=   0)   

  return   false;   

     

  //如果目錄的最後一個字母不是’\’,則在最後加上一個’\’   

  int   len=strlen(m_szInitDir);   

  if   (m_szInitDir[len-1]   !=   ‘\\’)   

  strcat(m_szInitDir,”\\”);   

     

  return   true;   

  }   

     

  bool   CBrowseDir::BeginBrowse(const   char   *filespec)   

  {   

  ProcessDir(m_szInitDir,NULL);   

  return   BrowseDir(m_szInitDir,filespec);   

  }   

     

  bool   CBrowseDir::BrowseDir   

  (const   char   *dir,const   char   *filespec)   

  {   

  _chdir(dir);   

     

  //首先查找dir中符合要求的文件   

  long   hFile;   

  _finddata_t   fileinfo;   

  if   ((hFile=_findfirst(filespec,fileinfo))   !=   -1)   

  {   

  do   

  {   

  //檢查是不是目錄   

  //如果不是,則進行處理   

  if   (!(fileinfo.attrib      _A_SUBDIR))   

  {   

  char   filename[_MAX_PATH];   

  strcpy(filename,dir);   

  strcat(filename,fileinfo.name);   

  if   (!ProcessFile(filename))   

  return   false;   

  }   

  }   while   (_findnext(hFile,fileinfo)   ==   0);   

  _findclose(hFile);   

  }   

     

  //查找dir中的子目錄   

  //因為在處理dir中的文件時,派生類的ProcessFile有可能改變了   

  //當前目錄,因此還要重新設置當前目錄為dir。   

  //執行過_findfirst後,可能系統記錄下了相關信息,因此改變目錄   

  //對_findnext沒有影響。   

  _chdir(dir);   

  if   ((hFile=_findfirst(“*.*”,fileinfo))   !=   -1)   

  {   

  do   

  {   

  //檢查是不是目錄   

  //如果是,再檢查是不是   .   或   ..     

  //如果不是,進行迭代   

  if   ((fileinfo.attrib      _A_SUBDIR))   

  {   

  if   (strcmp(fileinfo.name,”.”)   !=   0      strcmp   

  (fileinfo.name,”..”)   !=   0)   

  {   

  char   subdir[_MAX_PATH];   

  strcpy(subdir,dir);   

  strcat(subdir,fileinfo.name);   

  strcat(subdir,”\\”);   

  ProcessDir(subdir,dir);   

  if   (!BrowseDir(subdir,filespec))   

  return   false;   

  }   

  }   

      }   while   (_findnext(hFile,fileinfo)   ==   0);   

  _findclose(hFile);   

  }   

  return   true;   

  }   

     

  bool   CBrowseDir::ProcessFile(const   char   *filename)   

  {   

  return   true;   

  }   

     

  void   CBrowseDir::ProcessDir(const   char     

  *currentdir,const   char   *parentdir)   

  {   

  }   

     

     

  /*************************************************   

  這是例子example.cpp     

         

  /*************************************************   

  #include   “stdio.h”   

     

  #include   “BrowseDir.h”   

     

  //從CBrowseDir派生出的子類,用來統計目錄中的文件及子目錄個數   

  class   CStatDir:public   CBrowseDir   

  {   

  protected:   

  int   m_nFileCount;       //保存文件個數   

  int   m_nSubdirCount;   //保存子目錄個數   

     

  public:   

  //預設構造器   

  CStatDir()   

  {   

  //初始化數據成員m_nFileCount和m_nSubdirCount   

  m_nFileCount=m_nSubdirCount=0;   

  }   

     

  //返迴文件個數   

  int   GetFileCount()   

  {   

  return   m_nFileCount;   

  }   

     

  //返回子目錄個數   

  int   GetSubdirCount()   

  {   

  //因為進入初始目錄時,也會調用函數ProcessDir,   

  //所以減1後才是真正的子目錄個數。   

  return   m_nSubdirCount-1;   

  }   

     

  protected:   

  //覆寫虛函數ProcessFile,每調用一次,文件個數加1   

  virtual   bool   ProcessFile(const   char   *filename)   

  {   

  m_nFileCount++;   

  return   CBrowseDir::ProcessFile(filename);   

  }   

     

  //覆寫虛函數ProcessDir,每調用一次,子目錄個數加1   

  virtual   void   ProcessDir   

  (const   char   *currentdir,const   char   *parentdir)   

  {   

  m_nSubdirCount++;   

  CBrowseDir::ProcessDir(currentdir,parentdir);   

  }   

  };   

     

  void   main()   

  {   

  //獲取目錄名   

  char   buf[256];   

  printf(“請輸入要統計的目錄名:”);   

  gets(buf);   

     

  //構造類對象   

  CStatDir   statdir;   

     

  //設置要遍歷的目錄   

  if   (!statdir.SetInitDir(buf))   

  {   

  puts(“目錄不存在。”);   

  return;   

  }   

     

  //開始遍歷   

  statdir.BeginBrowse(“*.*”);   

     

  //統計結果中,子目錄個數不含   .   及   ..   

  printf(“文件總數:   %d\n子目錄總數:     

  %d\n”,statdir.GetFileCount(),   

  statdir.GetSubdirCount());   

  }

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/304611.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-01 11:05
下一篇 2025-01-01 11:05

相關推薦

發表回復

登錄後才能評論