QFile myFile.copy(newFile)失败,但myFile.error返回0(这意味着NoError)

时间:2013-03-22 13:28:05

标签: qt copy qfile

我正在使用Qt 4.6.3和SUSE 11 Linux,我尝试使用QFile复制文件:

QFile myFile ("/my/path/myFile.txt");

if (!myFile.copy("/my/otherpath/myNewFile.txt")){
    cout << "Qt error: " << myFile.error() << endl;
}

如果设备上有足够的位置,一切正常。

如果磁盘已满,如果我尝试使用bash在linux控制台中复制文件,那么我收到错误消息。

cp /my/path/myFile.txt /my/path/myFile.txt
cp: writing `/my/path/myFile.txt': No space left on device

在我的C ++程序中,myFile.copy()返回“false”,但myFile.error()返回“0”。 我希望myFile.error()返回的值不是'0。

此外,我尝试了myFile.errorString()并因此得到了“未知错误”。

是否可以获取错误代码或消息,例如“设备上没有剩余空间”?

1 个答案:

答案 0 :(得分:3)

目标文件很可能已经存在。文档http://doc.qt.digia.com/4.6/qfile.html#copy说:

  

如果名称为newName的文件已存在,copy()将返回false。

这不是实际的错误条件,因为copy()不覆盖是正常的。检查它的存在。当您检查文件错误时,请使用错误枚举执行此操作,例如:

QFile from("fromFile");
QFile target("targetFile");
if (target.exists())
    target.remove();
if (target.error() != QFile::NoError)
    // remove error
from.copy(target.fileName());
if (from.error() != QFile::NoError)
    // copy error