Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C编程创建文件并将其保存为当前登录的username.txt_C_Fopen - Fatal编程技术网

使用C编程创建文件并将其保存为当前登录的username.txt

使用C编程创建文件并将其保存为当前登录的username.txt,c,fopen,C,Fopen,我想用C创建一个文件,并将其保存为当前登录的“username”.txt 例如:如果当前用户是bob,则在运行程序时会在“c:\users\bob\MAP\”目录下创建一个名为“bob.txt”的文件 下面的代码将data.txt文件保存在“c:\users\bob\MAP\”目录下。但是,我想将保存的文件设置为“bob.txt”,因为他是执行程序的当前登录用户 char oBuffer[MAX_PATH]; memset(oBuffer, 0, MAX_PATH); ExpandEnviron

我想用C创建一个文件,并将其保存为当前登录的“username”.txt

例如:如果当前用户是bob,则在运行程序时会在“c:\users\bob\MAP\”目录下创建一个名为“bob.txt”的文件

下面的代码将data.txt文件保存在“c:\users\bob\MAP\”目录下。但是,我想将保存的文件设置为“bob.txt”,因为他是执行程序的当前登录用户

char oBuffer[MAX_PATH];
memset(oBuffer, 0, MAX_PATH);
ExpandEnvironmentStrings("%userprofile%", oBuffer, MAX_PATH);
strcat(oBuffer, "\\MAP\\");
CreateDirectoryA(oBuffer, 0);
strcat(oBuffer, "data.dat");
strcpy(LOG_PATH, oBuffer); 

logfile = fopen(("%s.dat", getenv("USERPROFILE")), "a+");
我希望在程序执行时创建“c:\users\bob\MAP\bob.txt”

char oBuffer[MAX_PATH];
memset(oBuffer, 0, MAX_PATH);
ExpandEnvironmentStrings("%userprofile%", oBuffer, MAX_PATH);
strcat(oBuffer, "\\MAP\\");
CreateDirectoryA(oBuffer, 0);
strcat(oBuffer, "data.dat");
strcpy(LOG_PATH, oBuffer); 

logfile = fopen(("%s.dat", getenv("USERPROFILE")), "a+");

提前感谢

只需使用已复制到
oBuffer

// ... UNTESTED CODE
ExpandEnvironmentStrings("%userprofile%", oBuffer, MAX_PATH);
// assume "C:\Users\username"
//         0123456789 username starts at position 9
int userpos = 9; // TODO: better user strrchr()
int uplen = strlen(oBuffer); // username ends at the end of the string
strcat(oBuffer, "\\MAP\\"); // oBuffer now has "C:\Users\username\MAP\"
CreateDirectoryA(oBuffer, 0);
//strcat(oBuffer, "data.dat");
sprintf(oBuffer, "%s%.*s.txt", oBuffer, uplen - userpos, oBuffer + userpos);
// oBuffer now has "C:\Users\username\MAP\username.txt"
// ...

可能是从
oBuffer
中提取的?在第一个
strcat()
oBuffer
“\\USERNAME”
结尾之前,是否有任何引用,因为我不理解它。谢谢这正是我想要的。谢谢pmgMind you:如果用户目录不是“C:\users\”(我相信某些Windows安装使用不同的目录),那么这将不起作用。还要注意空格和其他“奇怪”的字符。这是真的。如果windows安装在除c以外的另一个驱动器上,您认为哪种方法可行吗:\