Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt无法创建/写入C:\_Qt_Qfile - Fatal编程技术网

Qt无法创建/写入C:\

Qt无法创建/写入C:\,qt,qfile,Qt,Qfile,我正在编写一个需要写入已安装目录(C:\program Files…)的Qt程序(最初适用于windows 7的是4.7)。当我试图写入一个将被“保护”的位置(程序文件,C:\etc)时,没有创建任何文件。但是,QFile没有给我任何错误代码(error()返回0,这意味着它工作正常) 下面是我正在使用的一个代码snippit,它不起作用。我正在关闭文件,只是程序中的时间要晚得多 质量保证申请a(argc、argv) //设置插件路径。 QStringList path=QCoreApplica

我正在编写一个需要写入已安装目录(C:\program Files…)的Qt程序(最初适用于windows 7的是4.7)。当我试图写入一个将被“保护”的位置(程序文件,C:\etc)时,没有创建任何文件。但是,QFile没有给我任何错误代码(error()返回0,这意味着它工作正常)

下面是我正在使用的一个代码snippit,它不起作用。我正在关闭文件,只是程序中的时间要晚得多

质量保证申请a(argc、argv)

//设置插件路径。
QStringList path=QCoreApplication::librarypath();
append(QCoreApplication::applicationDirPath());
QCoreApplication::SetLibraryPath(路径);
//调试文件。
QString path=QCoreApplication::applicationDirPath()+“/debug.dat”;
//QFile调试文件(QCoreApplication::applicationDirPath()+“/debug.dat”);
QFile调试文件(“C:/debug.txt”);

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

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

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


有关更多详细信息,请参阅(向下滚动并查找虚拟化)。

QFile可能会向您提供错误代码,但您没有检查它

你应该做一些更像:

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

qWarning()AFAIK您不能为已经运行的进程请求管理员权限,但必须启动另一个进程来执行需要这些权限的操作。“但是,QFile没有给我任何错误代码”:您应该检查debugFile.open()的返回值。您完全正确。我的文件存储在虚拟存储中(不管怎么说,大多数都是这样。我有一个子文件夹由于某种原因没有被虚拟存储)。我添加了清单,所以我的程序现在可以虚拟运行。谢谢。哇,你说得对。我在打开文件之前检查了错误代码。这就是我熬夜编码时发生的情况:)。谢谢。
if (!debugFile.open(QFile::WriteOnly)) {
    qWarning() << "Failed to open" << debugFile.fileName() << "for write:" << debugFile.errorString();
}