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

时间:2014-09-27 22:30:20

标签: c++ windows directory

我似乎在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)会导致不同的字符。是否有其他数据类型没有此问题?

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

1 个答案:

答案 0 :(得分:0)

正如@ArnonZilca所指出的那样,#define UNICODE解决了问题的一半。可悲的是,并非所有的Windows功能都坚持这一规则。有些人还想要#define _UNICODE

在尝试解决问题的过程中,我还将整个代码更改为使用WCHAR *而不是wstring。我认为(但不能100%肯定)这没有什么区别。