2012-03-05 16 views
2

JschでSFTPで大きなファイルをアップロードしています。アップロード処理中に古いファイルが利用できるはずですので、私は一時ファイルにアップロードして、新しいファイルに名前を変更します。Jschの名前を変更するファイルに失敗します。

final String tmpName = dest + "_tmp"; 
channel.put(source, tmpName); 
channel.rename(tmpName, dest); 

アップロードはokですが、名前の変更は失敗します。

ERROR: Failed to upload files 
4: Failure 
at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2491) 
at com.jcraft.jsch.ChannelSftp.rename(ChannelSftp.java:1665) 
    ... 

問題がどこにあるか、私は理解することはできません。助けてください

+0

さらに詳しい情報を投稿できますか? "dest"には何がありますか? destにはどのような権限が設定されていますか? – tweber

答えて

5

ターゲットファイルは既に存在します。名前を変更する前に既存のファイルを削除してみてください。

+0

名前を変更する前に宛先ファイルを削除することは解決策です。ありがとう! – Stephan

+0

JSchは 'mv'を使用せず、SFTPコマンドをsftpサーバプロセス(sshサーバに組み込まれているか、それによって呼び出されている)に送信するだけです。このプロセスは、 'mv'または対応するsyscallを直接使用している可能性があります。 –

+0

あなたが正しいと思われます。私はコード内でそれを見たと思ったが、明らかに間違っていた。コードは次のとおりです:http://kickjava.com/src/com/jcraft/jsch/ChannelSftp.java.htm –

0

名前を変更しようとしましたが、うまく機能しました。同じファイルがあり、新しいファイルの名前を既存の名前に変更しようとしました。それは働いた。

上書きしたい場合は、ファイルをチェックする必要はありません。

関連する問題