2010-09-22 84 views
1

在特定的目錄中,我需要找到具有某些特定擴展名(例如.log) 的所有文件,並將其保存在某處。只需要C++解決方案導致我在win 2003服務器上嘗試它,而C++是我的限制。非常感謝您的幫助在特定的Dir C++中通過擴展名搜索

回答

3

您可以使用FindFirstFileFindNextFile(並且不要忘記在完成時調用FindClose)來枚舉目錄中的所有文件。您可以將過濾器傳遞給這些功能,以僅查找某些文件名,例如directory\*.log

在枚舉文件時,WIN32_FIND_DATA返回的結構告訴您每個文件的文件名和屬性(等等)。對於每個文件,檢查文件屬性以確保它是常規文件,方法是檢查它是否有FILE_ATTRIBUTE_NORMAL標誌,以便忽略目錄。

例如:

WIN32_FIND_DATA fileInfo; 
HANDLE hFind = FindFirstFile("C:\\directory\\to\\search\\*.log", &fileInfo); 
if(hFind == INVALID_HANDLE_VALUE) 
    ; // handle error 
else 
{ 
    do 
    { 
     if(fileInfo.dwFileAttributes & FILE_ATTRIBUTE_NORMAL) 
     { 
      printf("Found a .log file: %s\n", fileInfo.cFileName); 
     } 
    } while(FindNextFile(hFind, &fileInfo)); 
    if(GetLastError() != ERROR_NO_MORE_FILES) 
     ; // handle error 
    FindClose(hFind); 
} 
+0

的查找功能允許一個指定掩碼/過濾器,所以你甚至不需要檢查的延長,只是通過「* .LOG」,以用FindFirstFile – Necrolis 2010-09-22 17:48:38

+0

@Necrolis:好點,我已經更新了我的答案並添加了示例代碼。 – 2010-09-22 18:30:25