JCIFS jcifs.smb.SmbFile#renameTo не любит специальные символы, такие как '&'

Я столкнулся с проблемой при работе с удаленным общим ресурсом Windows с именем, содержащим символ «&», с использованием jcifs через apache-camel. Основная причина этого заключается в том, что, по-видимому, jcifs не слишком хорошо обрабатывает символ «&» при переименовании удаленного файла, в то время как у Windows с этим проблем нет.

public class SmbFileTest {

    @Test
    public void testAmperstand() throws Exception {
        String targetLocation = "smb://user:pass@host/share/hello&goodbye";
        SmbFile targetLocationFile = new SmbFile(targetLocation);
        if(!targetLocationFile.exists()){
            targetLocationFile.mkdirs();
        }
        SmbFile smbFile = new SmbFile(targetLocation+"/to.tmp");
        IOUtils.write("content",smbFile.getOutputStream());
        SmbFile smbFileDest = new SmbFile(targetLocation+"/to.txt");
        smbFile.renameTo(smbFileDest);
    }
}

вышеуказанный тест не проходит (jcifs 1.3.17 ‹= верблюд 2.12.1)

jcifs.smb.SmbException: The process cannot access the file because it is being used by another process.

Я мог бы просто изменить имя каталога, но, возможно, кто-то знает лучший подход. Что, если изменить его будет очень сложно?


person Andrzej    schedule 23.01.2015    source источник
comment
Кто-нибудь знает, как я могу переименовать Smb-Directory? Потому что переименование только SmbFile создает новый каталог, но он не содержит подкаталогов исходного.   -  person ZelelB    schedule 17.12.2015


Ответы (1)


Попробуйте закрыть выходной поток smbFile.getOutputStream() перед переименованием

person user1632665    schedule 31.03.2015
comment
Ага, ты попал! Спасибо - person Andrzej; 18.12.2015