0

我将 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() 并得到“未知错误”作为结果。

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

4

1 回答 1

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
于 2013-03-23T06:38:37.727 回答