Изменить размер файла (вниз) - PullRequest
2 голосов
/ 16 декабря 2009

Я пытаюсь сжать файл на месте.
Я заменяю содержимое одного файла содержимым другого, и когда я закончу, я хочу убедиться, что если исходный файл меньше файла 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 ... Мне интересно, кто-нибудь может сказать мне почему или предложить лучший подход.

Ответы [ 3 ]

3 голосов
/ 16 декабря 2009

"net helpmsg 1224" -> Запрошенная операция не может быть выполнена для файла с открытым разделом, отображенным пользователем.

А из MSDN для SetEndOfFile:

Если CreateFileMapping вызывается для создать объект сопоставления файлов для hFile, UnmapViewOfFile должен быть вызван сначала отменить отображение всех видов и вызвать CloseHandle, чтобы закрыть отображение файла объект, прежде чем вы можете позвонить SetEndOfFile.

0 голосов
/ 16 декабря 2009

Эта ошибка переводится как The requested operation cannot be performed on a file with a user-mapped section open.

У вас есть сегменты этого файла, отображенные в памяти?

0 голосов
/ 16 декабря 2009

Вы получили код ошибки 0, что означает успех (ERROR_SUCCESS), и он сработал, см. Строку 6 в предоставленном вами примере. Теперь, почему вы вызвали GetLastError сразу после проверки в строке 7? Кстати, я думаю, что вы должны использовать ERROR_SUCCESS вместо 0. Ссылка на коды ошибок может быть найдена здесь . Или вы действительно имели в виду, что это произошло в строке 9?

Можете ли вы подтвердить это? Надеюсь это поможет, С наилучшими пожеланиями, Том.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...