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