如何使用c在桌面中创建文件

时间:2016-11-26 03:50:33

标签: c windows file desktop

如何以及在桌面中创建和操作文件所需的库?仅使用C,而不是C#或C ++。 我正在使用Codeblocks,我使用allegro,这意味着我无法使用windows.h lib,该程序需要在windows中工作。

3 个答案:

答案 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创建它(或者,如果它存在,打开它),一旦创建/打开它,您就可以使用生成的文件处理以使用ReadFileWriteFile和可能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+") (*假设您使用的是默认用户文件夹位置。)

这将创建文件,然后您可以在此之后读取/写入文件。一定要使用正确的模式。 Herefopen和模式的参考。请记住#include <stdlib.h>