我有一个直接写入磁盘的问题,我正在尝试写一个旧的PARTCOPY的Qt版本(现在在与16位不兼容的系统上已经过时)
我使用的是Windows10,并将我的程序提升为管理员权限。
每次我尝试在QIODevice::WriteOnly
中打开"\.\A:“时,我都会收到一条错误消息”该参数不正确“。
使用Visual Studio分步调试,我想我已经发现在尝试执行CreateFile()
时QFSEnginePrivate::nativeOpen()
中出现了问题。
这行代码:
// WriteOnly can create files, ReadOnly cannot.
DWORD creationDisp = (openMode & QIODevice::WriteOnly) ? OPEN_ALWAYS : OPEN_EXISTING;
似乎就是原因。如果我强制将creationDisp
的值设置为OPEN_EXISTING
,那么我就可以打开文件,并且可以向磁盘写入数据,而不会再有任何问题。问题是,我不知道在不使用调试器的情况下,我可以用什么方法让它工作。
有人找到解决这个问题的办法了吗?
更新:(测试用例)
#include <QtCore/qcoreapplication.h>
#include <QtCore/qtextstream.h>
#include <QtCore/qfile.h>
int main(int argc, char **argv) {
QCoreApplication a(argc, argv);
QTextStream cout(stdout, QIODevice::WriteOnly);
QFile f("\\\\.\\A:");
if (!f.open(QIODevice::WriteOnly)) {
cout << f.errorString();
return -1;
}
return 0;
}
发布于 2019-01-05 21:23:15
你可以尝试这两个函数,我用(1)写得很成功。
bool QFile::open(FILE *fh, OpenMode mode, FileHandleFlags handleFlags = DontCloseHandle)
bool QFile::open(int fd, OpenMode mode, FileHandleFlags handleFlags = DontCloseHandle)
https://stackoverflow.com/questions/36804001
复制相似问题