Поддержка разных языков

265
08 мая 2017, 02:24

Здравствуйте. Проблема заключается в следующем. Написал приложений одной из функций которого является рекурсивный обход директории. Когда это приложение запускается на другом компьютере с установленным другим языком, оно вылетает с сообщением PROGRAM CRASH. Путем долгого поиска нашел, что проблема заключается в именах файлов и папок содержащих символы китайского языка. Когда программа доходит до них, она вылетает с вышеназванной ошибкой. Как добавить в проект Visual Studio поддержку разных языков? Подскажите пожалуйста. Уже сутки мучаюсь с этим.

    WIN32_FIND_DATAW ffd;
    TCHAR szDir[MAX_PATH];
    size_t length_of_arg;
    HANDLE hFind = INVALID_HANDLE_VALUE;
    DWORD dwError = 0;
    StringCchLength(dir, MAX_PATH, &length_of_arg);

    StringCchCopy(szDir, MAX_PATH, dir);
    StringCchCat(szDir, MAX_PATH, TEXT("\\*"));
    hFind = FindFirstFile(szDir, &ffd);
    if (INVALID_HANDLE_VALUE == hFind)
    {
        return 0;
    }
    do
    {
        try {
            if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
            {
                if (!(std::wstring(L".") == std::wstring(ffd.cFileName)) && !(std::wstring(L"..") == std::wstring(ffd.cFileName)))) {
                    try {
                        TCHAR directory[MAX_PATH];
                        StringCchCopy(directory, MAX_PATH, dir);
                        StringCchCat(directory, MAX_PATH, TEXT("\\"));
                        StringCchCat(directory, MAX_PATH, ffd.cFileName);
                        //wprintf(L"%s: %s\n", L"Folder", directory);                       
                        get_paths_arguments((STRSAFE_LPWSTR)directory, ctls, len);
                    }
                    catch (exception &ex) {
                        std::cout << "EXCEPTION ON GET DIR NAME";
                    }
                }
            }
            else
            {
                if (ffd.cFileName != NULL) {
                    TCHAR directory[MAX_PATH];
                    StringCchCopy(directory, MAX_PATH, dir);
                    StringCchCat(directory, MAX_PATH, TEXT("\\"));
                    StringCchCat(directory, MAX_PATH, ffd.cFileName);
                    //wprintf(L"%s: %s\n", L"File", directory);
                    ctls->catls[*len].name = (STRSAFE_LPWSTR)directory;
                    *len = *len + 1;
                    ctls->length = *len;
                    //cout << hFind << endl;
                    if (*len == (ctls->size - 1)) {
                        std::cout << "CRITICAL SIZE OF PATHS STRUCTURE" << std::endl;
                        FindClose(hFind);
                        return 0;
                    }
                }
            }
        }
        catch (char * str) {
            cout << "EXCEPTION ON GET_PATHS_ARGUMENTS: " << *str << endl;
            return 0;
        }
    } while (FindNextFile(hFind, &ffd));
    FindClose(hFind);
return 0;
Answer 1

Разобрался. Проблема была в том, что не проверялось возвращаемое значение функций StringCchCopy и StringCchCat. После того, как получил возвращаемое значение и сравнил его с S_OK, все стало хорошо. Проблема видимо была с превышением максимальной длины пути.

READ ALSO
Smarty PHP модальное окно

Smarty PHP модальное окно

ЗдравствуйтеЕсть данный код на smarty, который добавляет на страницу формы для отправки информации на почту

276
Что в нем не правильно? В JS

Что в нем не правильно? В JS

хочу чтоб написал 25,144,9,121 и 49

224
Как добавить VR фото на сайт

Как добавить VR фото на сайт

Здравствуйте, мне необходимо добавить на сайт фото 360 (виртуальная реальность), отснятые при помощи Samsung Gear 360, как это реализоватьОпыта в этом...

298
Как менять изображение в canvas для генерации изображения

Как менять изображение в canvas для генерации изображения

Добрый день, как можно осуществить загрузку изображения img1 в canvas со страницы через id для генерации и последующего скачивания получившегося...

203