Как сделать резервную копию с помощью API резервного копирования в Stack Overflow

Я пишу приложение, которое использовалось для резервного копирования определенного файла, поэтому с помощью API резервного копирования, т.е. API CreateFile BackupRead и WriteFile.

Получение ошибок Доступ к нарушению места чтения.

Я приложил код ниже.

#include <windows.h>

int main()
{
HANDLE hInput, hOutput;

//m_filename is a variable holding the file path to read from
hInput = CreateFile(L"C:\\Key.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);

//strLocation contains the path of the file I want to create.
hOutput= CreateFile(L"C:\\tmp\\", GENERIC_WRITE, NULL, NULL, CREATE_ALWAYS, NULL, NULL);DWORD dwBytesToRead = 1024 * 1024 * 10;
BYTE *buffer;
buffer = new BYTE[dwBytesToRead];
BOOL bReadSuccess = false,bWriteSuccess = false;
DWORD dwBytesRead,dwBytesWritten;
LPVOID lpContext;
//Now comes the important bit:

do
{
bReadSuccess = BackupRead(hInput, buffer, sizeof(BYTE) *dwBytesToRead, &dwBytesRead, false, true, &lpContext);

bWriteSuccess= WriteFile(hOutput, buffer, sizeof(BYTE) *dwBytesRead, &dwBytesWritten, NULL);

}while(dwBytesRead == dwBytesToRead);

return 0;

}

Кто-нибудь подскажет мне, как использовать эти API?

Благодарю.

0

Решение

Прочитайте документацию. В частности, второй абзац документации для BackupRead:

Вы должны установить переменную, на которую указывает lpContext в NULL до первого звонка BackupRead для указанного файла или каталога.

Ваш код также остро нуждается в обработке ошибок — вы вообще не проверяете ошибки, когда на самом деле многие из этих API могут дать сбой (посмотрите документацию для каждого API, чтобы узнать, как может произойти сбой функции и что происходит в случае сбоя). ). Вы также должны реализовать правильную обработку ресурсов, например, закрыв файловые дескрипторы.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]