0

所以我有一个 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 中。

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

4

2 回答 2

0

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

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

于 2013-10-03T18:03:57.797 回答
0

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

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

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

于 2013-10-03T18:04:05.063 回答