【发布时间】:2022-01-24 03:26:01
【问题描述】:
我成功创建了一个目录或文件夹,并且我还设法在该目录中创建了一个文件,但是如果我不知道他们的用户名或用户文件夹名称是什么,如何在用户的 appdata 本地创建目录和文件?谢谢!
我使用了代码块
#include <sys/stat.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main()
{
int check;
char* dirname = "C:/Pyromagne";
check = mkdir(dirname);
FILE* fp;
fp = fopen("C:/Pyromagne/test.pyr", "w+");
fputs("Pyromagne\n", fp);
fputs("qwertyuiop", fp);
fclose(fp);
FILE* ffpp;
char user[25];
char pass[25];
char uuser[25];
ffpp = fopen("C:/Pyromagne/test.pyr", "r");
strcpy(uuser, fgets(user, 255, (FILE*)ffpp));
printf("%s\n", uuser);
strcpy(uuser, fgets(user, 255, (FILE*)ffpp));
printf("%s\n", uuser);
fclose(ffpp);
}
【问题讨论】:
-
你可以试试
getenv("APPDATA"),这会给你“users/name/appdata/roaming”。你真的应该使用SHGetKnownFolderPath支持Unicode,特别是对于非英语系统。但我不知道如何在 gcc 中使用 C。 -
@BarmakShemirani 没那么难:
#include <Shlobj.h> PWSTR path; HRESULT hRes = SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, NULL, &path); if (SUCCEEDED(hRes)) { /* use path as needed... */ CoTaskMemFree(path); }并确保也链接到Shell32.lib。 -
@RemyLebeau 在 Visual Studio 中很容易,但 MinGW 有一些奇怪的地方。它甚至不会在 c++ 中编译,它在 c 中编译,我链接到
libshell32.a(MinGW 的版本)但得到 "undefined reference" 错误。我可以运行ShellExecute,它也是shell32.lib 函数,它甚至不需要显式链接命令。 -
@BarmakShemirani - Remy 的代码应该可以在 C 中使用 GCC 编译(至少对我有用,在 Windows 下在 gcc 中编译),但您需要为文件夹 ID 添加 libuuid.a。
-
@BarmakShemirani
getenv("APPDATA")和SHGetKnownFolderPath这两个有什么区别?为了使用getenv("APPDATA")函数,我需要哪些库?
标签: c winapi directory codeblocks appdata