2017-11-09 24 views
0

scpでファイルをコピーする際に問題があります。私はQtを使い、QProcessを使ってscpでファイルをコピーします。何か悪いことが起こったら私はいつもexitCode = 1になります。常に1を返します。端末でファイルをコピーしようとしました。初めて「Permission denied」というエラーが出て、終了コードが1でした。次に、イーサネットケーブルの接続を外し、「Network is unreachable」というエラーが表示されました。リターンコードはまだ1です。私のアプリケーションでは非常に混乱しています。これらのタイプのエラーを区別する必要があります。 何か助けていただければ幸いです。どうもありがとうございます!SCPは常に同じエラーコードを返します

+0

"私のアプリケーションでは、これらのタイプのエラーを区別する必要があります。"つまり、必要な処理をしない外部ユーティリティを呼び出す代わりに、プログラムでsshとscpを実装する必要があるでしょう。あなたがそれらの2にのみ関心がある場合は、あなたが他のQtのクラスにscpコマンドを呼び出す前に、アクセス権やネットワークアクセスをチェックするために仕事ができる – Kenster

+0

: 権限qfileにより::パーミッション() QNetworkAccessManager :: networkAccessible() –

+0

私は2番目の@Kensterとlibsshまたはlibssh2の使用をお勧めします。 scpのためだけにQtラッパーを書くのは難しくありません。 – sirop

答えて

0

は、実施例として、このコードを参照してください:

bool Utility::untarScript(QString filename, QString& statusMessages) 
{ 
    // Untar tar-bzip2 file, only extract script to temp-folder 
    QProcess tar; 
    QStringList arguments; 
    arguments << "-xvjf"; 
    arguments << filename; 
    arguments << "-C"; 
    arguments << QDir::tempPath(); 
    arguments << "--strip-components=1"; 
    arguments << "--wildcards"; 
    arguments << "*/folder.*"; 

    // tar -xjf $file -C $tmpDir --strip-components=1 --wildcards 

    tar.start("tar", arguments); 

    // Wait for tar to finish 
    if (tar.waitForFinished(10000) == true) 
    { 
    if (tar.exitCode() == 0) 
    { 
     statusMessages.append(tar.readAllStandardError()); 
     return true; 
    } 
    } 

    statusMessages.append(tar.readAllStandardError()); 
    statusMessages.append(tar.readAllStandardOutput()); 
    statusMessages.append(QString("Exitcode = %1\n").arg(tar.exitCode())); 
    return false; 
} 

それはあなたが分析するために利用可能なすべてのプロセス出力を収集します。特にreadAllStandardError()を見てください。

関連する問題