Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.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
C++ Qt,windows找不到Qt打开文件对话框可以访问的文件_C++_Qt_File_Save - Fatal编程技术网

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

C++ Qt,windows找不到Qt打开文件对话框可以访问的文件,c++,qt,file,save,C++,Qt,File,Save,所以我有一个Qt程序,可以保存文件和其他东西。我在我的C:/目录中保存了一些文件。在windows资源管理器、cygwin或命令提示符中查找该文件时,找不到该文件。我检查了我的文件夹选项,这些看起来不错。尽管无法找到该文件,但当我需要在Qt程序中加载文件时,该程序能够找到该文件。只有我的程序才能找到该文件,windows无法找到。我以管理员身份登录,但这可能与权限有关吗 另外,值得注意的是,当我将文件保存在c:/users/me/Documents/folder/folder中时,我似乎没有问题

所以我有一个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.");
}