Невозможно записать файлы в Windows - PullRequest
2 голосов
/ 14 марта 2012

Я пытаюсь сохранить некоторые файлы, используя C, с этим кодом:

sprintf(playerinput,"%s",end);
sprintf(fileloc,"%s/.notend",getenv("HOME"));
playerdata = fopen(fileloc, "w+"); /*create the new file*/
if (!playerdata)
{
printf("\n\t\t\tCould not save settings file.");    
return;
} else {
fputs(playerinput,playerdata); 
fclose(playerdata); 
}

Он должен установить playerinput на конечную переменную, которая работает в Linux, а затем установить местоположение файла на homearea /.Записать, затем создать или отредактировать файл и выложить его.В Linux (gcc) это работает нормально.Однако тот же код в Windows (i586-mingw32msvc-gcc, не работает. Я делаю что-то не так, или нужен другой файл заголовка?. Если вам нужна дополнительная информация, просто спросите.

Ответы [ 2 ]

1 голос
/ 14 марта 2012

В какое место вы пытаетесь записать свой файл? Имеет ли приложение права на запись в это местоположение?

РЕДАКТИРОВАТЬ: Глядя на стиль пути, который вы только что определили C://Documents and Settings//..., вы должны попробовать его с C:\\\\Documents and Settings\\.... Обратите внимание, что для каждой косой черты в пути есть двойной обратный слеш. Я не уверен, что fopen () конвертирует / в \, поэтому стоит попробовать.

Если вы уверены, что это будет работать в Windows Vista и выше, вы можете получить этот путь, используя getenv("HOMEPATH"). Я бы предложил определение макроса, например:

#ifdef _WIN32
#    define HOME_ENV "HOMEPATH"
#else
#    define HOME_ENV "HOME"
#endif

с последующим: getenv(HOME_ENV) чтобы получить домашний каталог для пользователя.

0 голосов
/ 14 марта 2012

Переменная среды HOME не является переменной среды по умолчанию в Windows, поэтому:

getenv("HOME");

вернет NULL.Вам нужно использовать другую функцию для получения домашнего каталога пользователя в Windows, SHGetFolderPath обеспечит это:

char path[MAX_PATH + 1] = "";

if (SUCCEEDED(SHGetFolderPath(0, 
                              CSIDL_LOCAL_APPDATA,
                              0,
                              SHGFP_TYPE_CURRENT,
                              path)))
{
    std::cout << path << "\n";
}

Этот вывод:

C: \ Documents and Settings \ admin \ Local Settings \ Application Data

на моем компьютере.

...