Qt无法创建/写入C:\

时间:2011-01-09 17:53:33

标签: qt qfile

我正在编写一个Qt程序(最初是针对Windows 7的4.7),需要写入已安装的目录(C:\ Program Files ...)。当我尝试写入“受保护”的位置(程序文件,C:\ etc)时,没有创建任何文件。但是,QFile没有给我任何错误代码(error()返回0表示它工作正常)。

这是我正在使用的代码snippit无法正常工作。我将在程序中稍后关闭文件。

QApplication a(argc,argv);

// Setting plugin paths.
QStringList paths = QCoreApplication::libraryPaths();
paths.append(QCoreApplication::applicationDirPath());
QCoreApplication::setLibraryPaths(paths);



// Debug file.
QString path = QCoreApplication::applicationDirPath() + "/debug.dat";
//QFile debugFile(QCoreApplication::applicationDirPath() + "/debug.dat");
QFile debugFile("C:/debug.txt");
qDebug() << debugFile.error();
debugFile.setPermissions(QFile::WriteUser | QFile::WriteGroup | QFile::WriteOwner | QFile::WriteOther);
debugFile.open(QFile::WriteOnly);
QTextStream debugStream(&debugFile);

// Processing the arguments.
debugStream << QString("Processing Arguments\n");

有没有人有关于如何解决这个问题的任何提示?

感谢您的帮助,

JEC


添加清单文件是我选择解决此问题的路径。

感谢所有帮助。

3 个答案:

答案 0 :(得分:7)

您是否检查过该用户是否未在VirtualStore中创建该文件?检查应用程序和服务日志下的事件查看器 - &gt;微软 - &gt; Windows - &gt; UacFileVirtualization - &gt;操作。如果您看到事件ID为5000的条目,则发生了FileCreateVirtualExclude事件。

检查文件是否未在%USERPROFILE%\AppData\Local\VirtualStore下创建。如果是这样,您可能需要嵌入一个请求所需权限的清单(即关闭虚拟化。)

有关详细信息,请参阅New UAC Technologies for Windows Vista(向下滚动并查找虚拟化。)

答案 1 :(得分:2)

您需要获得足够的用户访问权限(即“以管理员身份运行”)才能在Windows Vista +中写入此类文件夹。以管理员身份启动应用程序,或通过调用WinAPI请求管理员权限。

答案 2 :(得分:2)

QFile可能会给你一个错误代码,但你没有检查它。

你应该做更多的事情:

if (!debugFile.open(QFile::WriteOnly)) {
    qWarning() << "Failed to open" << debugFile.fileName() << "for write:" << debugFile.errorString();
}

您已经检查了QFile::error的返回值,但在调用open之前只检查了 - 您需要在打开尝试后检查