2015-01-23 5 views
0

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

public class SmbFileTest { 

    @Test 
    public void testAmperstand() throws Exception { 
     String targetLocation = "smb://user:[email protected]/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. 

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

+0

Кто-нибудь знает, как я могу переименовать SmB-каталог? Поскольку переименование только SmbFile создает новый каталог, но он не содержит подкаталогов исходного файла – ZelelB

ответ

0

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

+0

Да, вы прибили его! благодаря – Andrzej