列出 c++ 中的目录在窗户下
我想列出当前目录的所有文件,所以我有以下代码:
int WLoader::listdir(void)
{
WIN32_FIND_DATA data;
std::wstring path(L"*");
std::wstring *name;
HANDLE hFile = FindFirstFile(path.c_str(), &data);
if (hFile == INVALID_HANDLE_VALUE)
return (-1);
while(FindNextFile(hFile, &data) != 0 || GetLastError() != ERROR_NO_MORE_FILES)
{
std::cout << data.cFileName << std::endl;
}
return (0);
}
出于未知原因,我的程序显示此结果:
0029F29C
0029F29C
0029F29C
0029F29C
0029F29C
0029F29C
有人可以帮助我吗?
I want to list all files of the current directory, so I have this code :
int WLoader::listdir(void)
{
WIN32_FIND_DATA data;
std::wstring path(L"*");
std::wstring *name;
HANDLE hFile = FindFirstFile(path.c_str(), &data);
if (hFile == INVALID_HANDLE_VALUE)
return (-1);
while(FindNextFile(hFile, &data) != 0 || GetLastError() != ERROR_NO_MORE_FILES)
{
std::cout << data.cFileName << std::endl;
}
return (0);
}
For unknown reasons, my program is displaying this result :
0029F29C
0029F29C
0029F29C
0029F29C
0029F29C
0029F29C
Can someone help me please?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
WIN32_FIND_DATA 结构体的成员
cFileName
是一个TCHAR[N]
,并且
TCHAR
是映射到char 的 Windows 类型别名
或wchar_t
。 问题是,当您编写代码时,您不知道它会是哪一个。根据您的构建设置,您可以使用
char*
或wchar_t*
;一个应与std::cout
一起使用,另一个必须与std::wcout
一起使用。但你用哪一个呢?幸运的是,有一个宏可以在编译时找出正在使用的宏:
如果您尝试将文件名分配给
std::string
/std,您将发现同样的问题::wstring
。这就是使用 Windows API 所获得的结果。 :)解决这个问题的一种方法是为输出流和字符串定义宏。
因此,在程序顶部的某个位置:
然后在您的函数中,您需要的是:
并且您可以在其他地方使用
STDSTR
。需要考虑的事情。
The
WIN32_FIND_DATA
structure's membercFileName
is aTCHAR[N]
, andTCHAR
is a Windows type alias that maps either tochar
orwchar_t
. Problem is, you don't know which one it will be when you write your code.Depending on your build settings, you either have a
char*
, or awchar_t*
; one should be used withstd::cout
and the other must be used withstd::wcout
. But which one do you use?!Fortunately, there's a macro to find out which is in use when you compile:
You're going to find the same problem if you try to assign the filename to a
std::string
/std::wstring
. That's what you get for using the Windows API. :)One way around this is to define macros for the output stream and for strings.
So, somewhere at the top of your program:
Then in your function, all you need is:
and you can use
STDSTR
elsewhere.Something to consider.
您正在使用
std::cout
输出宽字符字符串。请改用 std::wcout 。You are using
std::cout
to output a wide-character string. Usestd::wcout
instead.我预计您的 Unicode/ANSI 不匹配。要打印 Unicode 字符串,请使用
std::wcout
I expect you have a Unicode/ANSI mismatch. To print a Unicode string, use
std::wcout