gpt4 book ai didi

CreateFileMapping() 用于将长度未知的文本写入文件

转载 作者:可可西里 更新时间:2023-11-01 14:14:38 24 4
gpt4 key购买 nike

我想将文本写入文件。文本长度未知。所以想不出设置要使用的mapped memory的大小,就设置为100。然后,问题出现了!字符串写入成功,但剩余的100字节空间被NULL填满!!我怎样才能避免它???

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
#include <assert.h>

void main()
{
HANDLE hFile2 = CreateFile("hi.txt", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
assert(hFile2 != INVALID_HANDLE_VALUE);

// mapping..
HANDLE hMapping2 = CreateFileMapping(hFile2, NULL, PAGE_READWRITE, 0, 100, NULL);
assert(hMapping2 != NULL);

void* p2;
p2 = MapViewOfFile(hMapping2, FILE_MAP_WRITE, 0, 0, 0);
assert(p2 != NULL);

char *chp;
if(rand() % 2)
chp = "yeah!!";
else
chp = "good";
// copy
memcpy(p2, chp, strlen(chp));

// close
UnmapViewOfFile(p2);
CloseHandle(hMapping2);
CloseHandle(hFile2);
}

最佳答案

函数SetEndOfFile会将物理文件大小设置为文件指针的当前位置。和 SetFilePointer将设置文件指针。

因此要截断文件:

   CloseHandle(hMapping2); // do first
SetFilePointer(hFile2, strlen(chp), 0, 0);
SetEndOfFile(hFile2);

关于CreateFileMapping() 用于将长度未知的文本写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27736985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com