【发布时间】:2014-11-22 15:48:47
【问题描述】:
我似乎卡在 Windows 文件路径中的特殊字符(如 äöü)上。它们是文件夹的合法名称(用户可以设置它们)。
我的程序的一部分必须能够遍历文件系统。尝试输入名为“öö”(测试用例)的子文件夹时,出现目录不存在的错误。
我很确定问题出在这条“线”上:
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)会产生不同的字符。有没有其他数据类型没有这个问题?
编辑: 只要文件夹名称不包含特殊字符(如 äöü 等),这完全可以正常工作。
【问题讨论】:
-
L"\*"看起来不像真正的代码。此外,它表示newPath不是反斜杠终止的。这很可能是这里的基本错误。此外,您可能通过“打印”“wstring”引入了对数据的误解。 -
L 在字符串用于扩展字符集之前。 stackoverflow.com/questions/6384118/…
-
我会随机猜测 newPath + ffd.cFileName 缺少反斜杠。调试器应该会有所帮助。
-
您是否尝试过使用
#define UNICODE? -
@Cheersandhth.-Alf 使用 wstring 会破坏像 üöä 这样的字符吗?我使用 wcout