C ++将文件复制到USB设备

时间:2016-05-23 09:59:34

标签: c++ usb createfile

我有几个不同类型的文件。 .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设备?

修改

  • FIX \\\\.\\I:\\\\.\I:\正常工作。 (也&#34;?&#34;而不是点可能)
  • 我有错误:ERROR_ACCESS_DENIED因此我尝试更改 dwDesiredAccess标记为0(我也尝试将VS2010作为管理员运行)。它现在已经修好了,但却造成了其他问题
  • 一旦我(神奇地)获得了一些文件,但.tar.gz文件中的文件已损坏/为空。当WriteFile()过于原始时,如何写入此文件?

0 个答案:

没有答案