我似乎在Windows文件路径中遇到了特殊字符(如äöü)。它们是文件夹的合法名称(用户可以设置它们)。
我程序的一部分必须能够遍历文件系统。当我尝试输入名为'öö'(testcase)的子文件夹时,我收到目录不存在的错误。
我更确定问题是这个'线':
wstring newPath = oldPath + ffd.cFileName + L"\\";
这
void reevaluateJob(wstring newPath) {
WIN32_FIND_DATA ffd;
HANDLE findFileHandle = FindFirstFile((newPath + L"\*").c_str(), &ffd);
//skipping invalid case handling and loop
if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
if ((wcscmp(ffd.cFileName, L".") != 0) && (wcscmp(ffd.cFileName, L"..") != 0))
reevaluateJob(newPath + ffd.cFileName + L"\\"); //<=== new path here
} else {
//skipping file part
}
}
因为打印新路径(或ffd.cFileName为wstring)会导致不同的字符。是否有其他数据类型没有此问题?
编辑: 只要文件夹名称不包含特殊字符(如äöü等),这就完全可以。
答案 0 :(得分:0)
正如@ArnonZilca所指出的那样,#define UNICODE
解决了问题的一半。可悲的是,并非所有的Windows功能都坚持这一规则。有些人还想要#define _UNICODE
。
在尝试解决问题的过程中,我还将整个代码更改为使用WCHAR *而不是wstring。我认为(但不能100%肯定)这没有什么区别。