文件内容倒序代码:
// 1. 打开文件内核对象 HANDLE hfile = CreateFile("F:\\MMFTEST.txt",GENERIC_READ | GENERIC_WRITE, 0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if (hfile == INVALID_HANDLE_VALUE) { DWORD err = GetLastError(); cerr << _T("Open File Error: %d",err) << endl; CloseHandle(hfile); return 0 ; } DWORD dwFileSize = GetFileSize(hfile,NULL); //2.创建文件映射内核对象 HANDLE hfilemap = CreateFileMapping(hfile,NULL,PAGE_READWRITE,0,dwFileSize+sizeof(WCHAR),NULL); //增加一个\0的长度 if (hfilemap == NULL) { DWORD err = GetLastError(); cerr << _T("Open File Map Error: %d",err) << endl; CloseHandle(hfilemap); CloseHandle(hfile); return 0 ; } //3.将数据映射到地址空间 PVOID pbFile = MapViewOfFile(hfilemap,FILE_MAP_WRITE,0,0,0); if (pbFile == NULL) { DWORD err = GetLastError(); cerr << _T("Map File Error: %d",err) << endl; CloseHandle(hfilemap); CloseHandle(hfile); return 0 ; } //此处不考虑Unicode的情况 PSTR pch = (PSTR)pbFile; //最后一位补0 pch[dwFileSize/sizeof(CHAR)] = 0; _strrev(pch); //修复\r\n的错误 pch = strchr(pch,'\n'); while(pch != NULL) { *pch++ = '\r'; *pch++ = '\n'; pch = strchr(pch,'\n'); } //4.撤销文件数据的映射 UnmapViewOfFile(pbFile); //5.关闭文件映射 CloseHandle(hfilemap); //去掉补入的\0 SetFilePointer(hfile,dwFileSize,NULL,FILE_BEGIN); SetEndOfFile(hfile); //6.关闭文件对象 CloseHandle(hfile);
本篇博客出自阿修罗道,转载请注明出处:http://blog.csdn.net/fansongy/article/details/8163571