0

Есть программа, которая смотрит все файлы во всех поддиректориях и выводит их расположение. Дебаг версия работает как и задумано, но релизная отказывается принимать японские символы и выдает ошибку. Eсли в paths = entry.path().string(); вместо .string(); использовать .u8string();, то программа просто игнорирует все файлы с "плохим" названием и заканчивает работу без ошибок. Есть идеи как заставить релиз версию принимать иероглифы? p.s. Без setlocale программа не работает вообще

#include <iostream>
#include <fstream>
#include <filesystem>
#include <string>
using namespace std;
using namespace filesystem;

void func(string game_path)
{
    int size;
    string paths; 
    for (const auto& entry : recursive_directory_iterator(game_path, directory_options::skip_permission_denied))
    {
        paths = entry.path().string();
        fstream iff(paths);
        size = iff.tellg();
        cout << paths << '\n';
        if (size != -1)
            cout<<paths;
        j++;
    }
    cout << j;
}

int main()
{
    string gamedir = "D:\\1";
    setlocale(LC_CTYPE, "ja_JP.UTF8");
    func(gamedir);

}
OLIMP
  • 35
  • https://www.it-swarm.net/ru/c%2B%2B/kak-ispolzovat-unicode-v-c/969696315/ – And Jan 09 '20 at 04:23
  • 1
    Иероглифы не могут кодироваться одним символом, так что нет ничего удивительного в том, что string не работает, используйте wstring – Andrej Levkovitch Jan 09 '20 at 05:55
  • https://ru.stackoverflow.com/questions/874721/Как-для-консоли-установить-utf-16le/874764#874764 – user7860670 Jan 09 '20 at 07:46

0 Answers0