0

指定されたファイルをバックアップするために使用されるアプリケーションを作成しているため、バックアップAPI呼び出し、つまりCreateFileBackupReadおよびWriteFileAPIを使用しています。

エラーの取得アクセス違反の読み取り場所。

以下にコードを添付しました。

#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の使用方法を教えてくれる人はいますか?

ありがとう。

4

1 に答える 1

0

ドキュメントを読んでください。具体的には、ドキュメントの 2 番目の段落BackupRead:

指定したファイルまたはディレクトリを最初に呼び出す前に、lpContextが指す変数を設定する必要があります。NULLBackupRead

また、コードにはエラー処理が必要です。実際には、これらの API の多くが失敗する可能性があります (各 API のドキュメントを参照して、関数が失敗する可能性と失敗時に何が起こるかを確認してください)。 )。また、ファイル ハンドルを閉じるなどして、正しいリソース処理を実装する必要があります。

于 2012-11-08T05:04:38.120 に答える