无法在Windows上写入文件

时间:2012-03-14 16:35:58

标签: c windows io save

我正在尝试使用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设置为end变量,该变量适用于Linux,然后将文件位置设置为homearea / .notend,然后创建或编辑文件,并将其输出。在Linux(gcc)中,这很好用。但是,相同的代码,在Windows上(i586-mingw32msvc-gcc,不起作用。我做错了什么,还是需要另一个头文件?目前我有:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>   
#include <string.h>
#include <stdlib.h>
#define MAX_NOTES 200
#define MAX_NAMES_TEXT 200
#define MAX_NOTES_TEXT 2000

作为我的标题和定义。如果您需要更多信息,请询问。

2 个答案:

答案 0 :(得分:1)

您要在哪个位置编写文件?应用程序是否具有写入该位置的正确权限?

编辑:查看刚刚定义的路径样式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)获取用户的主目录。

答案 1 :(得分:0)

环境变量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

在我的机器上。