Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2008.09.14;
Скачать: [xml.tar.bz2];

Вниз

BackupWrite меняет размер файла?   Найти похожие ветки 

 
clickmaker ©   (2007-12-03 14:14) [0]

Если убрать все проверки и т.д., то скелет кода выглядит так

hSrc = CreateFile(lpSrc, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
hDest = CreateFile(lpDest, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, 0, NULL);
DWORD dwFileSizeLow = GetFileSize(hSrc, &dwFileSizeHigh);
dwBlockSize = dwFileSizeLow / 5;
copyBuff = (LPBYTE)HeapAlloc(Heap, HEAP_GENERATE_EXCEPTIONS, dwBlockSize);
BackupRead(hSrc, copyBuff, dwBlockSize, &dwBytesRead, FALSE, FALSE, &lpContextRead);
BackupWrite(hDest, copyBuff, dwBytesRead, &dwBytesWritten, FALSE, FALSE, &lpContextWrite);
...


запускаю в отладчике. dwBlockSize < размера файла. После первого выполнения BackupWrite размер целевого файла становится = размеру исходного, а до конца забивается нулями. Ни SetEndOfFile, ни другими способами явно размер целевого файла не меняю.
Ничё не понимаю...


 
guav ©   (2007-12-03 14:27) [1]

Это учитывается ?
bAbort
[in] Indicates whether you have finished using BackupWrite on the handle. While you are restoring the file, specify this parameter as FALSE. After you are done using BackupWrite, you must call BackupWrite one more time specifying TRUE for this parameter and passing the appropriate lpContext. lpContext must be passed when bAbort is TRUE; all other parameters are ignored.


 
clickmaker ©   (2007-12-03 14:28) [2]


> [1] guav ©   (03.12.07 14:27)

да, это в конце. Но размер меняется уже после ПЕРВОГО вызова BackupWrite

while (...) {
 BackupRead(hSrc, copyBuff, dwBlockSize, &dwBytesRead, FALSE, FALSE, &lpContextRead);
BackupWrite(hDest, copyBuff, dwBytesRead, &dwBytesWritten, FALSE, FALSE, &lpContextWrite);
}

BackupRead(hSrc, NULL, 0, NULL, TRUE, FALSE, &lpContextRead);
BackupWrite(hDest, NULL, 0, NULL, TRUE, FALSE, &lpContextWrite);


 
guav ©   (2007-12-03 14:30) [3]

А, вроде понял вопрос. Думаю, буфер содержит не только данные файла, но и всю копируемую информацию, иначе смысла не было бы в BackupWrite. Вот и размер там тоже.


 
clickmaker ©   (2007-12-03 14:47) [4]


> [3] guav ©   (03.12.07 14:30)

ну да, единственный вариант, откуда винда узнает размер исходного.
Вопрос в том, как заставить копировать именно по кускам. Для случая, если прервали копирование большого файла... можно, конечно, руками ставить SetEndOfFile, если нет других путей.


 
guav ©   (2007-12-03 15:34) [5]

> Вопрос в том, как заставить копировать именно по кускам.
> Для случая, если прервали копирование большого файла...

Что-то я не понял опять. Какова задача ?


 
clickmaker ©   (2007-12-03 16:15) [6]


> [5] guav ©   (03.12.07 15:34)

ну, скажем, файл метров под 500 копируется, прервали, дабы потом докопировать. Чтобы осталось только то, что успели, а не весь файл забитый нулями до полного размера.
Хотя, тут поковырял BackupRead более подробно, там похоже нельзя с произвольного места возобновлять копирование, ибо потоки. Или можно, но пока не понял, как



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2008.09.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.042 c
3-1205917843
pavel_guzhanov
2008-03-19 12:10
2008.09.14
rf сделать в запросе два варианта записи в одно поле?


15-1216634664
TUser
2008-07-21 14:04
2008.09.14
Сколько ватт БП и дополнительных вентилияторов


11-1192822029
Вячеслав
2007-10-19 23:27
2008.09.14
Высоту списка в ComboBox?


3-1205492132
LoDr
2008-03-14 13:55
2008.09.14
Firebird, узнать имя сервера


15-1216788509
vajo
2008-07-23 08:48
2008.09.14
Что может быть с компьютером?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский