简体   繁体   中英

Special Characters in File Paths on Windows (c++)

I seem to be stuck on special characters (like äöü) in windows file paths. They are legal names for folders (users can set them).

A part of my program has to be able to traverse the filesystem. When trying to enter a childfolder with the name 'öö' (testcase) I get the error that the directory does not exist.

I am rather sure that the problem is this 'line':

wstring newPath = oldPath + ffd.cFileName + L"\\";

From

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
    }
}

Because printing the new path (or ffd.cFileName as wstring) results in different characters. Is there another data type that doesn't have this problem?

EDIT: This works totally fine as long as the folder names do not contain special characters (like äöü etc.).

As pointed out by @ArnonZilca, #define UNICODE solved half of the problem. Sadly not all windows functions stick to that rule. Some also want #define _UNICODE .

In the process of trying to fix the problem, I also changed my whole code to use WCHAR* instead of wstring. I assume (but cannot be 100% sure) that this does NOT make a difference.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM