举例:像操作字符串一样地操作一个文件中的内容
bool OperateFileJustLikeToString(const char * pszFileName)
{
const HANDLE hFile = CreateFile(pszFileName, \
GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, \
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile == INVALID_HANDLE_VALUE)
return false;
DWORD dwLength = GetFileSize(hFile, NULL);
//创建内存映射对象,内存映射文件的大小 = 文件长度 + (WCHAR)'\0'
//因为我们要在文件的末尾加上一个字符串的结束符'\0', 当我们将这个文件映射到内存中时,我们就可以像操作字符串一样地来操作文件了
const HANDLE hFileMap = CreateFileMapping(
hFile, NULL, PAGE_READWRITE, 0,
dwLength + sizeof(WCHAR),
NULL);
char * pFile = (char *)MapViewOfFile(hFileMap, FILE_MAP_WRITE, 0, 0, 0);
pFile[dwLength / sizeof(char)] = '\0';
//现在对文件的操作就变成了对一字符串pFile的操作了,所有的字符串函数都能
//对pFile这个字符串进行操作, 而操作的结果则会被保存到文件中去(但是并不
是改变pFile
//中的内容后会立刻写到文件中去,但是在调用UnmapViewOfFile()后,保证先前对pFile的修改全部保存到文件中了)
//...........
//statement();
//............
UnmapViewOfFile(pFile);
CloseHandle(hFileMap);
//我们改变了文件的长度,因此要重新设置文件的结束符以删除留在文件尾部的多余内容(比如删除我们先前加到文件末尾的'\0'字符)
SetFilePointer(hFile,dwLength , NULL, FILE_BEGIN);
SetEndOfFile(hFile); //设定当前文件指针所在处为文件结束处.该处后面的内容将被删除
CloseHandle(hFile);
return true;
}