我正在尝试缩小文件。
我正在用另一个文件替换一个文件的内容,当我完成时我想确定源文件是否小于dest文件,dest文件正确收缩。
(为什么:因为dest文件是备份文件并且写入媒体非常昂贵,所以我只将备份写入备份)
1.) HANDLE hDest =(HANDLE)_get_osfhandle( fileno(backupFile.GetBufferedHandle()) );
2.) DWORD startingSize = GetFileSize(hDest, NULL);
3.) DWORD dwPtr = SetFilePointer(hDest, newSize, NULL, FILE_BEGIN);
4.) int err = GetLastError();
5.) if (dwPtr != INVALID_SET_FILE_POINTER)
6.) { err = SetEndOfFile(hDest);
7.) if(err == 0)
8.) err = GetLastError();
9.) err = SetFileValidData(hDest, newSize);
10.) }
11.) DWORD endingSize = GetFileSize(hDest, NULL);
我在第8行遇到错误1224 ...我想知道是否有人可以告诉我原因,或建议更好的方法。
答案 0 :(得分:3)
“net helpmsg 1224” - >无法对打开了用户映射部分的文件执行请求的操作。
来自MSDN的SetEndOfFile
:
如果调用CreateFileMapping 为。创建文件映射对象 hFile,必须调用UnmapViewOfFile 首先取消映射所有视图并调用 CloseHandle关闭文件映射 你可以打电话之前的对象 SetEndOfFile。
答案 1 :(得分:0)
该错误转换为The requested operation cannot be performed on a file with a user-mapped section open.
您是否有该文件的任何内存映射段?
答案 2 :(得分:-2)
您的错误代码为0表示成功(ERROR_SUCCESS)并且确实有效,请参阅您提供的示例中的第6行。现在为什么你在第7行检查后立即拨打GetLastError
?顺便说一句,我认为您应该使用ERROR_SUCCESS而不是0.可以找到错误代码的引用here。或者你的意思是它发生在第9行?
你能证实吗? 希望这可以帮助, 最好的祝福, 汤姆。