我正在尝试使用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
作为我的标题和定义。如果您需要更多信息,请询问。
答案 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
在我的机器上。