萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 編程語言綜合 >> C++下的目錄遍歷操作

C++下的目錄遍歷操作

   最近使用C#比較多,對於目錄操作DirectoryInfo和Directory這個類感覺用起來很方便,突然又要寫點C++代碼,也要使用目錄遍歷,想了想以前的經歷,記得好像MFC中的CFileFind類使用起來還算方便,但具體使用也忘了,又要花點時間去查下,還是記錄在這以後再使用來查閱也方便。

  在VC++下使用CFileFind類,首先要在項目屬性設置中關於“MFC的使用”設置好,再在頭文件中包含 afx.h,最後就可以使用CFileFind類了。

  具體使用還是看代碼,微軟提供的遍歷目錄的代碼:

  void Recurse(LPCTSTR pstr)

  {

  CFileFind finder;

  // build a string with wildcards

  CString strWildcard(pstr);

  strWildcard += _T("*.*");

  // start working for files

  BOOL bWorking = finder.FindFile(strWildcard);

  while (bWorking)

  {

  bWorking = finder.FindNextFile();

  // skip . and .. files; otherwise, we'd

  // recur infinitely!

  if (finder.IsDots())

  continue;

  // if it's a directory, recursively search it

  if (finder.IsDirectory())

  {

  CString str = finder.GetFilePath();

  TRACE(_T("%sn"), (LPCTSTR)str);

  Recurse(str);

  }

  }

  finder.Close();

  }

  void PrintDirs()

  {

  Recurse(_T("C:"));

  }

  代碼說明:

  1. 項目選用多字節字符集,不想去糾結_T, LPCTSRT等;

  2. 關於TRACE,就是一個debug下的宏,差不多等於printf,具體參考:http://msdn.microsoft.com/en-us/library/4wyz8787(v=vs.90).aspx

  3. CFileFind: FindNextFile一定要至少提前GetFileName等成員函數前調用一次,否則要報錯。所以bWorking = finder.FindNextFile();這行代碼放前面

copyright © 萬盛學電腦網 all rights reserved