2015-03-02 65 views
0

我試過這段代碼,但我沒有得到任何輸出。它也不會拋出錯誤。如何獲取使用Visual C++的文件夾中的所有文件名?

#include <windows.h> 

int main(int argc, char* argv[]) 
{ 
    WIN32_FIND_DATA search_data; 
    memset(&search_data, 0, sizeof(WIN32_FIND_DATA)); 
    HANDLE handle = FindFirstFile("c:\\*.txt", &search_data); 
while(handle != INVALID_HANDLE_VALUE) 
{ 
    printf("Found file: %s\r\n", search_data.cFileName); 

    if(FindNextFile(handle, &search_data) == FALSE) 
    break; 
} 

return 0; 
}` 
+0

如果你有Boost,你可以用迭代器來做到這一點,這種方式不僅適用於Windows。無論如何,你說它沒有錯誤,但沒有錯誤檢查。如果第一次調用返回「INVALID_HANDLE_VALUE」,那麼您將不知道爲什麼。 – chris 2015-03-02 04:47:01

+0

實際上,您的C:驅動器的根目錄中是否有任何.txt文件? – 2015-03-02 04:59:17

+0

這意味着你的句柄是無效的,你能得到最後一個錯誤,看看? – 2015-03-02 05:28:27

回答

0
//using boost file system.  
#include <boost/filesystem.hpp> 
#include <iostream> 
int main() 
{ 
    using namespace boost::filesystem; 

    path myPath(L"D:\\Article"); 
    for (auto beg = directory_iterator(myPath); beg != directory_iterator(); ++beg) { 
    std::cout << *beg << std::endl; 
    } 
} 
+0

歡迎@lincoln,你應該描述你對代碼做了什麼修改以及爲什麼。 :) – AdrieanKhisbe 2015-03-02 06:32:42

0

你沒有得到任何輸出,因爲FindFirstFile()失敗和被您忽略的錯誤。總是檢查API錯誤代碼。

試試這個。

#include <windows.h> 

int main(int argc, char* argv[]) 
{ 
    WIN32_FIND_DATA search_data; 
    DWORD err; 

    memset(&search_data, 0, sizeof(WIN32_FIND_DATA)); 

    HANDLE handle = FindFirstFile("c:\\*.txt", &search_data); 
    if (handle == INVALID_HANDLE_VALUE) 
    { 
     err = GetLastError(); 
     if (err == ERROR_FILE_NOT_FOUND) 
      printf("No files were found\r\n"); 
     else 
      printf("Unable to search for files. Error: %u\r\n", err); 
    } 
    else 
    { 
     do 
     { 
      if ((search_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) 
       printf("Found file: %s\r\n", search_data.cFileName); 
     } 
     while (FindNextFile(handle, &search_data)); 

     err = GetLastError(); 
     if (err == ERROR_NO_MORE_FILES) 
      printf("Done\r\n"); 
     else 
      printf("Unable to search for files. Error: %u\r\n", err); 

     FindClose(handle); 
    } 

    return 0; 
} 
+0

嗨,謝謝你的輸入。它在第一個「無法搜索文件」時拋出錯誤..只能解決這個問題嗎? – PFAdmin 2015-03-02 15:02:02

+0

它給你一個錯誤代碼。正在報告的實際價值是多少?您是否閱讀了[文檔](https://msdn.microsoft.com/en-us/library/windows/desktop/aa364418.aspx)?::「如果該功能失敗或無法定位搜索字符串中的文件lpFileName參數,返回值是INVALID_HANDLE_VALUE,lpFindFileData的內容是不確定的,爲了得到擴展的錯誤信息,調用GetLastError函數,如果函數失敗是因爲找不到匹配的文件,GetLastError函數返回ERROR_FILE_NOT_FOUND。 – 2015-03-02 20:46:07

+0

是的,這是問題...得到它正確的感謝 – PFAdmin 2015-03-08 08:07:12

相關問題