我有Windows 8.1 x64,我无法在Windows驱动器上写文件。运行以下代码时没有任何反应:
void MainWindow::on_actionBackup_Database_triggered()
{
QFile en1;
en1.copy("En1.txt","C:\\En1.txt");
}
现在,如果我将此代码更改为:
void MainWindow::on_actionBackup_Database_triggered()
{
QFile en1;
en1.copy("En1.txt","E:\\En1.txt"); // change C to E
}
代码将正常运行。为什么是这样?请注意我的C盘是我的操作系统驱动器。
答案 0 :(得分:4)
C:\的根目录受操作系统保护,因为那里有重要的(和隐藏的)文件。
程序需要以管理员身份运行,或者写在其他地方。 ProgramData是一个更合适的地方 - 它们具有可以使用shell文件夹操作找到的CSID。 (或环境变量)。
答案 1 :(得分:4)
复制功能返回boolean
值,表示复制是否成功。
您应该使用它来查看它是否成功复制并处理它没有的情况。
它无法复制的原因可能是您的c:\驱动器上的文件权限。您可以更改此选项,但如果可能,最好选择其他目录。
http://doc.qt.io/qt-4.8/qfile.html#copy
bool QFile :: copy(const QString& newName)
将fileName()当前指定的文件复制到名为newName的文件中。如果成功则返回true;否则返回false。
请注意,如果名为newName的文件已存在,则copy()将返回false(即QFile不会覆盖它)。
源文件在复制之前已关闭。