我有几个不同类型的文件。 .gz
.cfg
.tar
,我想将它们复制到连接到云端硬盘的 USB 设备。这是我的代码:
//path -> destination path looking like: "\\\\?\\"+ driveLetter + ":\\file"
//i -> my Iterator for Map<srcPath,destPath>
QFile qsrcFile(i.key());
QFileInfo srcInfo(qsrcFile);
QString path(i.value());
HANDLE usbHandle = CreateFileW(path.toStdWString().c_str(),
GENERIC_WRITE, //can cause permission problems > set to 0
FILE_SHARE_WRITE,
0,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
0);
if(usbHandle == INVALID_HANDLE_VALUE){
DWORD err = ::GetLastError();
fprintf(stderr,"Error INVALID_HANDLE_VALUE \n \t Path: %s \n \t Error: %d \n",path.toStdString().c_str(),err);
if(err == ERROR_PATH_NOT_FOUND){
CreateDirectoryW(path.toStdWString().substr(0,path.lastIndexOf("\\")).c_str(),0);
i.previous(); //try creating a file again,
//this time with a parent directory (works only for depth = 1)
}
continue;
}
DWORD written = 0;
if(!WriteFile(usbHandle, qsrcFile.readAll(), srcInfo.size(), &written, NULL)){
qsrcFile.close();
fprintf(stderr,"Error at WriteFile() \n \t file: %s \n",qsrcFile.fileName().toStdString().c_str()); //writting error
continue;
}
如果我运行该程序,似乎usbHandler无效。我不确定如何正确使用这些WinAPI功能,但我认为这可行。
我只需要将我的文件写入I:/(USB)
。
如何将文件复制到连接到云端硬盘的USB设备?
修改:
\\\\.\\I:\\
让\\.\I:\
正常工作。 (也&#34;?&#34;而不是点可能)ERROR_ACCESS_DENIED
因此我尝试更改
dwDesiredAccess
标记为0(我也尝试将VS2010作为管理员运行)。它现在已经修好了,但却造成了其他问题.tar
和.gz
文件中的文件已损坏/为空。当WriteFile()
过于原始时,如何写入此文件?