2016-05-27 8 views
0

ローカルコンピュータ上のhdf5バイナリファイルをリモートコンピュータブレードにコピーしようとしています。私はlibsshを使って、自分のQtアプリケーションによって生成された後に、目的のディレクトリまたはファイルをコピーしています。 libsshの使用私​​はssh_sessionをオープンし、認証し、チャネルを開き、リモートコマンドを送ることができます。C++のバイナリファイルをリモートロケーションにコピー

このコマンドは、個々のコンピューティングブレードごとに実行されています。それぞれの呼び出しの間に、私は閉じて、次のブレードへのsshセッションを開きます。これらのファイルはブレードから外しますが、破損しているように見えます。それらはまったく同じファイルサイズです。私は個々のバイトを比較してどれだけ壊れているかを知る方法を見つけ出しておらず、ヒントもあります。

別のテスト端末プログラムでsshコピーコマンドを実行すると、ファイルが元の状態になり、ブレードで読み取り可能になります。この問題は、Qt GUIプログラムからファイルを移動した場合にのみ発生するようです。

EDIT:何が間違っているのかを少し深く掘り下げてみると、リモートサーバーのファイルは同じサイズではないようです。バイトの大部分が欠落しているように見えます。その上に、ファイルのローカルバージョンでバイトごとに何があるかを調べると、ほとんどすべてのバイトが異なります。

+3

私はまだここに新しいですが、誰かがそれがすぐに投票したり、改善する方法を降りる原因となっているこの質問について間違って教えてください? libsshの例はありません。私はこれに答えて何週間も検索し、何も出てこないのです。 – Wired365

+3

あなたの質問の現在のフォームでは、本当に意味のある答えを提供する方法はありません。あなたの質問を編集して、あなたのプログラムの関連するソースコードを含めてください。そして、転送されたファイルの何が問題であるのかを確認してください。短すぎますか?長すぎる?バイトは間違っていますか?また、あなたの質問には多くの不必要な言葉遣いがあります。あなたの問題に関連するものを整理してみてください。 – Kenster

+0

チップのおかげで、私はそれをきれいにします。 – Wired365

答えて

0

答えは、SSHコマンドが呼び出される前にHDF5ライターが正しく閉じられていなかったということでした。他の人が書いたカスタムH5クラスを動的に割り当てることで問題を解決し、SSHコマンドが呼び出される前に削除するようにしました。 HDF5の読み書きクラスを書いた人は、ファイルの開閉を適切に処理しなかったことが分かりました。

以下は、私が話していることの例です。

HDF5writer_class *hdf5_writer = new HDF5writer_class(); 
hdf5_writer->create_file("/local/machine/hdf5_file.h5"); 

// ... add the data to the file 

delete hdf5_writer; 

// Open SSH Session and run the copy commands 

かいつまんで、あなたが書いているファイルを閉じて、あなたはそれをコピーしようとする前に、使用するためにリリースされることを確認してください。

関連する問題