如何以及在桌面中创建和操作文件所需的库?仅使用C,而不是C#或C ++。 我正在使用Codeblocks,我使用allegro,这意味着我无法使用windows.h lib,该程序需要在windows中工作。
答案 0 :(得分:1)
在Windows Vista或更高版本中,使用SHGetKnownFolderPath
查找桌面路径。您必须使用Unicode函数来获取文件路径,使用_wfopen_s
。您可以将ANSI写入文件,但建议写入UTF16或将文本转换为UTF8。
#include <stdio.h>
#include <Windows.h>
#include <Shlobj.h>
int main()
{
wchar_t *desktop;
if(S_OK == SHGetKnownFolderPath(&FOLDERID_Desktop, 0, NULL, &desktop))
{
wprintf(L"Desktop path: %s\n", desktop);
wchar_t filename[MAX_PATH];
swprintf_s(filename, MAX_PATH, L"%s\\%s", desktop, L"file.txt");
wprintf(L"Filename path: %s\n", filename);
FILE *fp;
_wfopen_s(&fp, filename, L"w");
if(fp)
{
fprintf(fp, "Hello world\n");
fclose(fp);
}
else
{
wprintf(L"can't create file\n");
}
CoTaskMemFree(desktop);
}
return 0;
}
在Windows XP中使用SHGetSpecialFolderPath
(不建议使用)
#include <stdio.h>
#include <Windows.h>
#include <Shlobj.h>
int main()
{
wchar_t desktop[MAX_PATH];
if(SUCCEEDED(SHGetFolderPathW(NULL, CSIDL_DESKTOP | CSIDL_FLAG_CREATE, NULL, 0, desktop)))
{
wprintf(L"desktop: %s\n", desktop);
wchar_t path[MAX_PATH];
swprintf(path, L"%s\\%s", desktop, L"filename.txt");
HANDLE handle = CreateFileW(path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(handle != INVALID_HANDLE_VALUE)
{
DWORD temp;
const char *buf = "hello world";
WriteFile(handle, buf, strlen(buf), &temp, NULL);
CloseHandle(handle);
}
else
{
printf("can't create file\n");
}
}
return 0;
}
答案 1 :(得分:0)
鉴于您使用的是Windows,您需要查看CreateFile
及其相关功能。
文件的生命周期如下:您可以使用CreateFile
创建它(或者,如果它存在,打开它),一旦创建/打开它,您就可以使用生成的文件处理以使用ReadFile
,WriteFile
和可能DeleteFile
对其进行操作。完成后,您需要使用CloseHandle
关闭句柄。
答案 2 :(得分:0)
1如果您使用的是Unix或类Unix系统,可以调用
system("touch ~/Desktop/FILE");
在您的代码中,您需要#include <stdlib.h>
。
这会调用命令&#34; touch~ / Desktop / FILE&#34;。如果您想在此之后处理(读/写)文件,则必须使用正确的模式调用fopen
。但是如果你想在文件中写一些东西,第二种方法要好得多。
2您也可以使用
对于Unix或类Unix操作系统:
FILE *file = fopen("~/Desktop/FILE", "w+")
对于Windows:
FILE *file = fopen("C:\\Users\\YOUR_USER_NAME\\Desktop\\FILE", "w+")
(*假设您使用的是默认用户文件夹位置。)
这将创建文件,然后您可以在此之后读取/写入文件。一定要使用正确的模式。 Here是fopen
和模式的参考。请记住#include <stdlib.h>
。