程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++寫的Windows下遍歷文件列表程序,處理全程使用UTF16

C++寫的Windows下遍歷文件列表程序,處理全程使用UTF16

編輯:C++入門知識

記得以前看過別人用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秒。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved