windows c : 未能创建文件的 mmap

windows c : failed to create mmap of a file

我需要创建文件的 mmap。由于 windows 不支持 mmap,我尝试了 MapViewOfFile() 方法。但这失败了。

这是我的代码:

char template[1024];
snprintf(template, sizeof(template) / sizeof(char), "%s", "C:\Users\Ijas\Downloads\ijas.txt");

HANDLE  hfile = CreateFile(template, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS, NULL);

if (hfile == INVALID_HANDLE_VALUE)
{
    fprintf(stderr, "CreateFile() error 0x%08x \n", GetLastError());
    return NULL;
}

HANDLE map_handle = CreateFileMapping(hfile, NULL, PAGE_READWRITE | SEC_RESERVE, 0, 0, 0);
if (map_handle == NULL)
{
    fprintf(stderr, "CreateFileMapping() error 0x%08x\n", GetLastError());
    CloseHandle(hfile);
    return NULL;

}

sp = (char*)MapViewOfFile(map_handle, FILE_MAP_WRITE | FILE_MAP_READ, 0, 0, 0);

if (sp->buffer == NULL)
{
    fprintf(stderr, "MapViewOfFile() error 0x%08x\n", GetLastError());
    CloseHandle(hMapFile);
    CloseHandle(hfile);
    return NULL;
}

输出:

CreateFile() error 0x00000003

提示:模板是一个现有文件。

我的代码有什么问题吗?请帮帮我?

正如评论中所讨论的那样,有多种尝试命中的可能性,问题似乎出在 UnicodeAnsi 上。 template 被声明为 char* 但被传递给 CreateFile,后者默认调用 CreateFileW。如果 OP 使用 C++ 编译器编译代码,编译器会抱怨这一点,但使用 C 编译器,它只依赖于编码器的智慧。

CreateFileA 期望 const char*CreateFileW 期望 const wchar_t*