列出目录C ++中的文件夹

时间:2013-12-08 15:40:13

标签: c++ file-io directory

我知道这可能是重复的。但是,我正在努力实际得到一个有效的答案。

我要做的是列出工作目录中的所有文件夹。以下是我从MS网站(http://msdn.microsoft.com/en-us/library/windows/desktop/aa365200(v=vs.85).aspx

改编的一些代码

这给出了输出:

Filname:52428

我已检查过该文件夹 - 我想列出三个文件夹'Vidoe' 'John' 'David'我不确定为什么会打印出上面的结果。

我不想使用Boost - 也不想下载任何第三方插件。

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);
}

修改 我没有特定的方法可以做到这一点,我想要做的就是输出目录中的文件夹 - 我不在乎它是如何完成的。

1 个答案:

答案 0 :(得分:3)

在......

*ffd.cFileName

删除*


同时取消对Sleep的调用。


同时删除愚蠢的TEXT宏调用,使用L"blah"等宽字符串文字。


哦,我忘了,也用do循环(或while循环)替换for循环,因为它不确定FindFirstFile调用是否成功。< / p>


哦,重要,调试输出使用wcout,而不是cout。后者对Unicode字符串的输出一无所知。但是wcout可以处理它们。

你得到的输出,

52428

似乎是wchar_t值0xCCCC,被cout视为整数,该值表示未初始化的存储,这意味着FindFirstFile调用失败。


因此,在运行程序时也要确保当前目录。一个好主意是从命令行运行它。那你确定。