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 找不到可执行文件
由于找不到qt5webenginecore.dll无法继续执