gpt4 book ai didi

c++ - Windows 上文件路径中的特殊字符 (c++)

转载 作者:太空宇宙 更新时间:2023-11-04 13:45:45 30 4
gpt4 key购买 nike

我似乎卡在 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)会产生不同的字符。有没有其他数据类型没有这个问题?

编辑:只要文件夹名称不包含特殊字符(如 äöü 等),这就完全可以正常工作。

最佳答案

正如@ArnonZilca 所指出的,#define UNICODE 解决了一半的问题。遗憾的是,并非所有 Windows 功能都遵守该规则。有些人还想要 #define _UNICODE

在尝试解决问题的过程中,我还更改了整个代码以使用 WCHAR* 而不是 wstring。我假设(但不能 100% 确定)这不会产生任何影响。

关于c++ - Windows 上文件路径中的特殊字符 (c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26079788/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com