Ошибка переименования файла Jsch

Я загружаю большой файл по SFTP через Jsch. В процессе загрузки старый файл должен быть доступен, поэтому я загружаю временный файл и переименовываю его в новый файл.

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

Загрузка в порядке, но переименование не удается:

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)
    ...

Я не могу понять, где проблема. Пожалуйста помоги


person Stephan    schedule 05.03.2012    source источник
comment
Можете ли вы опубликовать более подробную информацию? Что в десте? Какие разрешения установлены на dest?   -  person towe75    schedule 05.03.2012


Ответы (2)


Целевой файл уже существует. Попробуйте удалить существующий файл перед переименованием.

person Gijs Overvliet    schedule 05.03.2012
comment
Вы правы, удаление файла назначения перед переименованием — это решение. Спасибо! - person Stephan; 05.03.2012
comment
JSch не использует mv, он просто отправляет SFTP-команды процессу sftp-сервера (который либо встроен в ssh-сервер, либо вызывается им). Этот процесс может напрямую использовать mv или соответствующий системный вызов. - person Paŭlo Ebermann; 06.03.2012
comment
Кажется, ты прав. Я думал, что видел это в коде, но, видимо, ошибся. Вот код: kickjava.com/src/com/jcraft/jsch/ КаналSftp.java.htm - person Gijs Overvliet; 08.03.2012
comment
Класс трудно читать. Я не знаю базовой реализации. - person Stephan; 08.03.2012

Я пробовал переименовывать, и это сработало для меня нормально. был еще один файл с таким же, и я попытался переименовать новый файл в существующий. и это сработало.

поэтому нет необходимости проверять, существует файл или нет, если вы хотите перезаписать.

person user3636759    schedule 07.12.2016