我知道这可能是重复的。但是,我正在努力实际得到一个有效的答案。
我要做的是列出工作目录中的所有文件夹。以下是我从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);
}
修改 我没有特定的方法可以做到这一点,我想要做的就是输出目录中的文件夹 - 我不在乎它是如何完成的。
答案 0 :(得分:3)
在......
*ffd.cFileName
删除*
。
同时取消对Sleep
的调用。
同时删除愚蠢的TEXT
宏调用,使用L"blah"
等宽字符串文字。
哦,我忘了,也用do
循环(或while
循环)替换for
循环,因为它不确定FindFirstFile
调用是否成功。< / p>
哦,重要,调试输出使用wcout
,而不是cout
。后者对Unicode字符串的输出一无所知。但是wcout
可以处理它们。
你得到的输出,
52428
似乎是wchar_t
值0xCCCC,被cout
视为整数,该值表示未初始化的存储,这意味着FindFirstFile
调用失败。
因此,在运行程序时也要确保当前目录。一个好主意是从命令行运行它。那你确定。