記得以前看過別人用MFC寫的遍歷文件夾列表的程序,用CFileDialog類中的GetNextPathName()函數可以輕易地時間文件遍歷。
然而MFC太老了,調用起來又麻煩,還得用動態鏈接。
CLR的Directory類和File類,感覺自己不太熟,總覺得寫完了,沒有移植的可能。
所以我最近用Windows函數寫了一個遍歷文件夾,在內存中形成鏈式的其內部成員的信息,並能把內存中的成員打印到文本文件中。
考慮到現在文件路徑越來越長,而且字符又比較復雜。因此內部處理都使用UTF16的動態數組Wstring,對於路徑長度木有限制。對於漢語目錄應該木有問題。(我想這個程序肯定不支持某些小語種命名的文件……畢竟16位能表示的65536個字符太少了,難怪漢語的簡體代碼頁和繁體代碼頁分別是932和950)
程序鏈接在這裡,沒有設積分,歡迎大家使用討論。
http://download.csdn.net/detail/sera_ph/4625402
閒言少敘,程序是通過vs2008編譯通過,只需添加windows.h庫函數,需要定義UNICODE。
程序的主函數簡化如此:
[cpp]
int _tmain(int argc, _TCHAR* argv[])
{
//從參數中得到帶獲取內部信息文件夾路徑
std::wstring original_path(L"c:\\windows");
//以隊列形式存儲文件
std::list<class theFile * > l_pfile;
//產生文件隊列
int result = generateList(original_path, &l_pfile);
//如果監視result == -1 則對此目錄的訪問有問題
//打印文件隊列
print_list("d:\\filelog.txt", &l_pfile);
//釋放內存中的隊列
return 0;
}
目錄中的文件及信息,以自定義的文件類(class theFile)指針的形式存儲。文件夾下成員的指針的隊列是l_pfile
剛在CSDN上敲的字木有了,好憂桑。默默無語地上圖。
在產生文件隊列中,使用的windows函數為:
hListFile = FindFirstFile( (LPCWSTR)szFullPath_a, &FindFileData );
FindNextFile(hListFile, &FindFileData)
其中兩個WIN32_FIND_DATA FindFileData; HANDLE hListFile; 為查找句柄與查找結果。
其中文件相關信息在WIN32_FIND_DATA FindFileData成員中可見。大體包含修改時間、屬性等等,大體見圖:
執行效率方面,應該稍高於mfc。畢竟更加底層。對於windows目錄下8萬多個文件遍歷,內存建立隊列、寫文件、釋放內存,我的筆記本用了不到3秒。