2013-12-08 26 views
0

清單文件夾我知道,這很可能是重複的。但是,我正在努力實際得到一個工作答案。目錄中的C +

我所試圖做的是列表中的所有的工作目錄中的文件夾。下面是一些代碼,我已經適應了從微軟站點(http://msdn.microsoft.com/en-us/library/windows/desktop/aa365200(v=vs.85).aspx

這使輸出:

Filname:52428 

我已經檢查的文件夾 - 有,我想列出'Vidoe' 'John' 'David'我三個文件夾我不確定它爲什麼打印出上面的結果。

我不想使用升壓 - 也沒有下載任何第三方plugings。

int main(int argc, char** argv) 
{ 
    HANDLE hFind = INVALID_HANDLE_VALUE; 
    WIN32_FIND_DATA ffd; 
//The Directory where the .exe is run from. 

    hFind = FindFirstFile(TEXT(".\\Players\\*"), &ffd); 
    do 
    { 
     Sleep(1000); 
     bool isDirectory = ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY; 
     if(isDirectory) 
     { 
      cout << "DirectoryName: " << *ffd.cFileName << endl; 
     } 
     else 
     { 
      cout << "FileName: " << *ffd.cFileName << endl; 
     } 
    }while(FindNextFile(hFind, &ffd) != 0); 
    FindClose(hFind); 
} 

編輯: 我沒有,我想這樣做,具體的方式,所有我想要做的是輸出目錄中的文件夾 - 我不關心它是如何做。

+0

得到了錯誤:文件名:????????????????????????????????????????? ????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????? ?????? =?G ??? =?g☺ 按任意鍵繼續。 。 。 – KingJohnno

+0

在繼續之前,您應該檢查hFind的值。我敢打賭,你找回了INVALID_HANDLE_VALUE,因爲沒有發現任何東西。 – drescherjm

+0

你在Visual Studio Debugger裏面運行這個嗎?請記住,調試的默認應用程序路徑不是包含可執行文件的文件夾。它是包含解決方案文件的文件夾。 – drescherjm

回答

3

在&hellip;

*ffd.cFileName 

刪除*


也刪除對Sleep的呼叫。


同時刪除傻TEXT宏調用,使用寬字符串文字像L"blah"


哦,我忘了,還更換do循環用while環(或for循環),因爲它不是確保FindFirstFile呼叫將會成功。


哦,重要,用於調試輸出使用wcout,不cout。後者不知道任何關於Unicode字符串的輸出。但wcout可以處理它們。

你得到的輸出,

52428 

似乎wchar_t值0xCCCC,由cout的整數,它的值表示未初始化的存儲,這意味着FindFirstFile調用失敗處理。


因此,在運行程序時也要確保當前目錄。一個好主意是從命令行運行它。那你確定。

+0

優秀的作品。完美! 如何將字符串變量與L(字符串)一起使用? – KingJohnno

+0

@KingJohnno:取決於String類型。用大寫的第一個字母不是'std :: string',但它可以是MFC/ATL'String'(它可以很好地處理寬字符串)。無論如何,請檢查它的文檔。 –