调整文件大小(向下)

我正在试图缩小文件。
我用另一个文件replace一个文件的内容,当我完成时,我想确保源文件是否比dest文件小,dest文件收缩正确。

(为什么:因为dest文件是备份,写入媒体非常昂贵,所以我只写了deltas到备份)

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); 

我在第12行收到错误1224 …我想知道是否有人可以告诉我为什么,或者build议一个更好的方法。

“net helpmsg 1224” – >所请求的操作无法在用户映射节打开的文件上执行。

从MSDN的SetEndOfFile

如果调用CreateFileMapping为hFile创建文件映射对象,则必须首先调用UnmapViewOfFile以取消映射所有视图,并调用CloseHandle关闭文件映射对象,然后才能调用SetEndOfFile。

该错误转换为The requested operation cannot be performed on a file with a user-mapped section open.

你有该文件的任何内存映射段?

你得到一个错误代码0意味着成功(ERROR_SUCCESS),它确实工作,请参阅你提供的示例中的第6行。 现在为什么在第7行检查后立即调用GetLastError ? 顺便说一下,我认为你应该使用ERROR_SUCCESS而不是0.可以在这里找到对错误代码的引用。 或者你是否确实意味着它发生在第9行?

你能证实吗? 希望这有助于,最好的问候,汤姆。