Как настроить кодировку для Windows - C (СИ)

Формулировка задачи:

Но на этот раз уже не просто вывод в консоль. Создание и чтение файлов, которые могут быть с равной вероятностью на кириллице, содержать пробелы... Да, что называется, хоть иврит. На моём уютном линуксовом ноутбуке - всё прекрасно. У знакомых с Шindoшs - всё плохо. Имя папки получаю с помощью SDL2, а именно - SDL_GetBasePath(). Сомневаюсь, что у самого SDL есть какие-то проблемы с этим... Но проблемы есть у меня. Допустим, я записал адрес этой папки в буфер, рядом с ним приписал "log.log". Кириллица, насколько я понял, будет в UTF-8. Если сделать fopen сразу указав в качестве пути буфер - будет плохо. Файл не откроется. Как мне гарантированно открывать эти файлы, читать папки внутри этой? Добавлено через 4 часа 39 минут Это настолько глупый вопрос или всем некогда?...

Код к задаче: «Как настроить кодировку для Windows - C (СИ)»

textual
#ifdef WIN32
    #warning Windows hamster!
 
#else
    texdir = opendir(texpath);
    if(texdir == NULL)
    {
        logWriteWithPrefix("[ERROR]", "Couldn't open texture directory");
        logWrite(texpath);
        exit(NOT_FOUND);
    }
    while(texdirent = readdir(texdir))
    {
        char *d_name = texdirent->d_name;
        if(!strcmp(d_name,"empty.png"))
            emptyexists = 1;
        if(strcmp(d_name, ".") && strcmp(d_name, "..")) // Skip virtual dirs
        {
            char* buf = calloc(strlen(texpath) + strlen(d_name) + 1, sizeof(char));
            sprintf(buf, "%s%s", texpath, d_name);
            DIR *tmpdir;
            tmpdir = opendir(buf);
            if(tmpdir != NULL)
            {
                Texturepack tmptexturepack;
                tmptexturepack.name = calloc(strlen(d_name), sizeof(char));
                sprintf(tmptexturepack.name, "%s", d_name);
                AddTexturepackToList(cont->texturepackList, tmptexturepack);
                logWriteWithPrefix("Found texturepack", d_name);
                if(!strcmp(d_name, "Default")) // If it's name is "Default"
                {
                    deffound = cont->texturepackList->size;
                    logWrite(" > Default texturepack");
                }
                if(!strcmp(d_name, cont->texturepackName)) // If it's name is simillar to previous selected
                {
                    selfound = 1;
                    logWrite(" > Selected texturepack");
                }
            }
            closedir(tmpdir);
            free(buf);
            buf = NULL;
        }
    }
    closedir(texdir);
#endif
Эта работа вам не подошла?

Вы всегда можете заказать любую учебную работу у наших авторов от 20 руб.

12   голосов, оценка 3.750 из 5


СДЕЛАЙТЕ РЕПОСТ