我想写文件到文件。文本的长度未知。所以我不知道要设置要使用的映射内存的大小,我将其设置为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);
}
答案 0 :(得分:3)
函数SetEndOfFile
将物理文件大小设置为文件指针的当前位置。 SetFilePointer
将设置文件指针。
所以截断文件:
CloseHandle(hMapping2); // do first
SetFilePointer(hFile2, strlen(chp), 0, 0);
SetEndOfFile(hFile2);