C++ Qt,windows找不到Qt打开文件对话框可以访问的文件
所以我有一个Qt程序,可以保存文件和其他东西。我在我的C:/目录中保存了一些文件。在windows资源管理器、cygwin或命令提示符中查找该文件时,找不到该文件。我检查了我的文件夹选项,这些看起来不错。尽管无法找到该文件,但当我需要在Qt程序中加载文件时,该程序能够找到该文件。只有我的程序才能找到该文件,windows无法找到。我以管理员身份登录,但这可能与权限有关吗 另外,值得注意的是,当我将文件保存在c:/users/me/Documents/folder/folder中时,我似乎没有问题 保存文件的代码:C++ Qt,windows找不到Qt打开文件对话框可以访问的文件,c++,qt,file,save,C++,Qt,File,Save,所以我有一个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.");
}
编辑:只是在另一台计算机上尝试了这个。我的电脑有windows 8,另一台电脑有windows XP。我无法在XP机器上复制该问题
编辑:
我相信我已经找到了问题所在(),但我仍在试图找到解决方法
我试图保存到c://目录的文件实际上保存在c:/users/username/AppData/Local/VirtualStore中
有什么方法可以覆盖它吗?目前,我的解决方案是,如果用户保存在C:/、C:/Program Files/、C:/Program Files(x86)或C:/Windows/目录中,则警告用户。保存在这些目录中的所有文件实际上都保存在C:/User/Current User/AppData/Local/VirtualStore/中
如果有人有更好的解决方案,请告诉我。尽管默认情况下您可能以管理员身份登录,但大多数程序都以非相关模式运行(基本上不是以管理员身份)。此外,默认情况下,不相关的程序对
C:
驱动器上的根目录没有写入权限(与它们没有写入权限相同,例如,C:\Program Files\
)。情况并非总是这样-我不记得当时的确切情况,但我认为写入程序文件在Windows XP中已经受到保护,C:
只是在之后才受到保护,我想至少从Windows 7开始?无论如何,出于兼容性原因,对这些受保护目录的写入是虚拟化的
如果您想直接在C:\
中编写,请尝试在提升模式下运行Qt应用程序(右键单击->以管理员身份运行,或右键单击->属性->兼容性->以管理员身份运行此程序),但实际上,您不应该这样做
如果您真的担心用户会被这一点弄糊涂,您可以在用户选择文件的位置后,但在实际写入之前,执行写入访问检查,并显示警告或让他们选择另一个位置。您是否检查了它是否正确写入了c:\换句话说,您是否在调试器下进行了检查和/或检查了错误代码?你也应该发布代码是的,以管理员的身份运行。我真的不希望这个程序自动以管理员的身份运行,我也不希望很多使用这个应用程序的人都能以管理员的身份运行。
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.");
}