@Trollevskiy
Студент

Программа не открывает файлы, в пути которых присутствует кириллица, что не так в коде?

Если открывать файл, указав его полный путь в параметре запуска, открывается абсолютно любой файл, но если указывать путь к файлу после запуска программы, открываются только файлы, путь к которым не содержит кириллицу.

Привожу два примера кода и скрины:
Листинг 1 (работает с любыми кодировками):
int main (int argc, char *argv[])
{
    if(argc!=2)
    {
        cout<<"Format: program.exe filepath"<<endl;
        return 1;
    }
    cout<<"Path: "<<argv[1]<<endl;
    ifstream input(argv[1], ios::binary | ios::in);
    if(!input)
    {
       cout<<"Error"<<endl;
       return 1;
    }
    char symbol;
    while(!input.eof())
    {
        input.get(symbol);
        if(!input.eof())cout<<symbol;
    }
    input.close();


Листинг 2 (только с латиницей):
char filename[200];
    cout<<"File: ";
    cin.getline(filename, sizeof filename);
    cout<<"Path: "<<filename<<endl;
    ifstream input(filename, ios::binary | ios::in);
    if(!input)
    {
       cout<<"Error"<<endl;
       return 1;
    }
    char symbol;
    while(!input.eof())
    {
        input.get(symbol);
        if(!input.eof())cout<<symbol;
    }
    input.close();

4e081b45c15f4195ac9d9bff6aebfab9.png6c2cdbf190d4480c97aae54cbd8907ec.png8483ba9aa5474da788f4540c61762df3.png
  • Вопрос задан
  • 997 просмотров
Пригласить эксперта
Ответы на вопрос 1
Nipheris
@Nipheris Куратор тега C++
setlocale(LC_ALL, "rus");
SetConsoleCP(1251);


в начале работы программы.
С поддержкой UTF-8 в винде туго, если очень нужна - тогда лучше читать из консоли винапишными средствами и конвертить в UTF-8 строки, а потом уже манипулировать.

А, и да, без windows.h не обойтись, т.к. SetConsoleCP
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы