我在直接写入磁盘时遇到问题,我试图编写旧版PARTCOPY的Qt版本(现在已经过时了,与16位不兼容的系统)
我正在使用Windows 10,并将我的程序提升为管理员权限。
每当我尝试打开" \\。\ A:"在QIODevice::WriteOnly
中,我收到错误消息"参数不正确"。
使用Visual Studio逐步调试,我认为我在QFSEnginePrivate::nativeOpen()
执行CreateFile()
时发现了问题。
该行:
// 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;
}
答案 0 :(得分:0)
您可以尝试这两个功能,我用(1)成功编写了。
bool QFile::open(FILE *fh, OpenMode mode, FileHandleFlags handleFlags = DontCloseHandle)
bool QFile::open(int fd, OpenMode mode, FileHandleFlags handleFlags = DontCloseHandle)