0

SUSE 11 Linux で Qt 4.6.3 を使用しており、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() を試したところ、結果として「不明なエラー」が発生しました。

「No space left on device」のようなエラーコードやメッセージを取得することはできますか?

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 に答える