我正在编写一个用于备份某些指定文件的应用程序,因此使用备份API调用,即 createfile backupread和writefile 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?
谢谢。
阅读文档。具体而言,BackupRead
的文档的第二段:
您必须将
lpContext
指向的变量设置为NULL
,然后第一个调用指定文件或目录的BackupRead
。
您的代码也迫切需要错误处理 - 您根本没有检查错误,而实际上许多这些API可能会失败(检查每个API的文档以了解该功能如何失败以及发生了什么当失败时)。您还应该实施正确的资源处理,例如通过关闭文件手柄。