2012-11-08 3 views
0

특정 파일을 백업하는 데 사용하는 응용 프로그램을 작성 중이므로 백업 API 호출을 사용합니다. 즉, CreateFile BackupRead 및 WriteFile API의입니다.C에서 백업 API를 사용하여 백업하는 방법

액세스 오류 읽기 위치가 잘못되었습니다.

아래 코드를 첨부했습니다.

#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

Vista에서 Windows 8로가는 창이 없기 때문에 프로그램 – billz

+0

의 C : 디렉토리에 파일을 만들 수 있습니다. 예를 들어, 대상 위치는 아무거나 ... – user1603185

답변

0

설명서를 읽으십시오. 특히, BackupRead에 대한 문서의 두 번째 단락 :

당신은 변수를 설정해야 지정된 파일이나 디렉토리에 대한 BackupRead의 최초의 호출 전에 NULLlpContext에 의해 지적했다.

코드도 오류 처리가 절실합니다. 실제로 많은 API가 실패 할 수도 있습니다 (각 API의 설명서를 확인하여 기능이 어떻게 실패하는지 알아보십시오). 실패 할 때 일어나는 일). 올바른 리소스 처리를 구현해야합니다 (예 : 파일 핸들을 닫음으로써

+0

답장을 보내 주신 James에게 감사드립니다. lpContext를 NULL로 설정 한 후 액세스 보일 오류가 발생하지 않습니다. 하지만이 애플리케이션은 파일을 백업하지 않습니다. 각 API에 대해 hanling 오류로 작동합니다. – user1603185

관련 문제