Qt,windows找不到Qt打开文件对话框可以找到的文件

Posted

技术标签:

【中文标题】Qt,windows找不到Qt打开文件对话框可以找到的文件【英文标题】:Qt, windows cannot find file that Qt open file dialog can 【发布时间】:2013-10-03 15:54:19 【问题描述】:

所以我有一个 Qt 程序来保存文件等。我在 C:/ 目录中保存了一些文件。当我在 Windows 资源管理器、cygwin 或命令提示符中查找该文件时,我找不到该文件。我检查了我的文件夹选项,看起来不错。尽管无法找到该文件,但当我需要在我的 Qt 程序中加载文件时,该程序能够找到该文件。只有我的程序能够找到该文件,Windows 不能。我以管理员身份登录,但这可能与权限有关吗?

另外,值得注意的是,当我将文件保存在 c:/users/me/Documents/folder/folder 中时,我似乎没有遇到问题。

保存文件的代码:

QString saveFileName = QFileDialog::getSaveFileName(this,"Select the file you wish to save to.","","");

QFile saveFile(saveFileName);

if(saveFile.open(QIODevice::WriteOnly))

    QTextStream stream(&saveFile);
    QString stringToSaveToFile;
    stream << stringToSaveToFile;
    saveFile.close();

else

    QMessageBox::warning(this, "Error", "Cannot open file.");

打开文件的代码:

QString selectedFile = QFileDialog::getOpenFileName(this, "Select a .pro file.", "", tr("Profile file (*.pro);;All (*.*)"));

QString fileContents;
QFile file(selectedFile);

if (file.open(QIODevice::ReadOnly) | (QIODevice::Text))

    QTextStream in(&file);
    fileContents = in.readAll();

else

    QMessageBox::warning(this, "Error", "Unable to open file.");

编辑:刚刚在另一台计算机上尝试过。我的电脑有windows 8,另一台电脑有windows XP。我无法在 XP 机器上复制该问题。

编辑:

我相信我已经找到了问题所在 (http://answers.microsoft.com/en-us/windows/forum/windows_vista-files/windows-explorer-compatibility-files/5b377209-cfe4-4be6-959d-e1de4b8be16d),但我仍在尝试找出解决方法。

我试图保存到 c:/ 目录的文件实际上保存在 C:/users/username/AppData/Local/VirtualStore 中。

有没有办法以某种方式覆盖它?

【问题讨论】:

您是否检查过它是否正确写入 c:\ - 换句话说,您是否检查过调试器和/或检查错误代码?您还应该发布代码 【参考方案1】:

目前我的解决方案是警告用户是否保存在 C:/、C:/Program Files/、C:/Program Files (x86) 或 C:/Windows/ 目录中。保存在这些目录中的所有文件实际上都保存在 C:/User/Current User/AppData/Local/VirtualStore/ 中。

如果有人有更好的解决方案,请告诉我。

【讨论】:

【参考方案2】:

即使默认情况下您可能以管理员身份登录,大多数程序都在非提升模式下运行(基本上,不是以管理员身份)。此外,默认情况下,未提升的程序对C: 驱动器上的根目录没有写入权限(同样,它们没有写入权限,例如C:\Program Files\)。情况并非总是如此 - 我现在不记得了,但我认为写入程序文件已经在 Windows XP 中受到保护,并且 C: 只是在之后才受到保护,我认为至少从 Windows 7 开始?无论如何,出于兼容性原因,对那些受保护目录的写入是虚拟化的。

如果您想直接在C:\ 中写入,请尝试在提升模式下运行您的 Qt 应用程序(右键单击 -> 以管理员身份运行,或右键单击 -> 属性 -> 兼容性 -> 以管理员身份运行此程序),但是真的,你不应该。

如果您真的担心用户对此感到困惑,您可以检查写入权限 - 在用户选择文件位置之后,但在实际写入之前 - 并显示警告或让他们选择其他位置。

【讨论】:

是的,以管理员身份运行有效。我真的不希望程序自动以管理员身份运行,而且我不希望许多将使用此应用程序的人有意识以管理员身份运行。

以上是关于Qt,windows找不到Qt打开文件对话框可以找到的文件的主要内容,如果未能解决你的问题,请参考以下文章

Qt5 - Windows:Windows 找不到可执行文件

由于找不到qt5gui.dll,无法继续执行代码有影响吗

由于找不到qt5webenginecore.dll无法继续执

QT编程可以用sys/socket.h这个头文件吗,怎么我的QT5找不到这个头文件,我的是wind

找不到QT的头文件怎么办?

在 Qt Creator 中找不到 .pro 文件