ローカル マシン上の hdf5 バイナリ ファイルをリモート コンピューティング ブレードにコピーしようとしています。Qt アプリケーションによって生成された後、目的のディレクトリまたはファイルをコピーするために libssh を使用しています。libssh を使用すると、ssh_session を開き、認証し、チャネルを開き、リモート コマンドを送信できます。
for (QStringList::iterator it = ipList.begin(); it != ipList.end(); ++it)
{
ssh_session my_session = new ssh_new();
QString ip_address = *it;
ssh_options_set(my_session, SSH_OPTIONS_HOST, ip_address.toStdString().c_str());
// Connect...Authenticate using public key....
QString command = QString("rm -r %2; cp -r %1 %1; cp /local/file.txt /remote/file.txt").arg(local_dir, remote_dir);
execute_remote_command(my_session, command.toStdString().c_str());
// Open channel and execute command
ssh_disconnect(my_session);
ssh_free(my_session);
}
このコマンドは、個々のコンピューティング ブレードに対して実行されています。各呼び出しの間に、次のブレードへの ssh セッションを閉じたり開いたりしています。ファイルはブレードを特定しますが、破損しているようです。それらはまったく同じファイルサイズです。個々のバイトを比較して、それらがどれほど破損しているかを確認する方法を見つけていません。そこにあるヒントも同様に高く評価されます。
別のテスト ターミナル プログラムで ssh コピー コマンドを実行すると、ファイルはそのままのように見え、ブレードで読み取ることができます。この問題は、ファイルが Qt GUI プログラム内から移動された場合にのみ発生するようです。
編集:何が間違っているのかをもう少し深く掘り下げると、リモートサーバー上のファイルは同じサイズではないようです。バイトの大部分が欠落しているようです。その上、ファイルのローカル バージョンでバイトごとに何があるかを調べると、ほとんどすべてのバイトが異なります。