Мне пришлось перейти на JCIFS-NG для поддержки протокола SMB2.При этом код mkdir перестает работать из старого оригинального JCIFS с использованием SMB1.Теперь я получаю сообщение «Не удалось подключиться», если папка не существует, но подключается, но не работает, если указана только корневая папка общего доступа.Я видел множество сообщений на эту тему, но я не вижу ничего, что могло бы решить эту проблему.Код кажется довольно простым.Я не знаю, понимаю, что отсутствует или неправильно.
Если я использую значения в строке для Smbfile и создаю строку cmd:
net use \ myservername \ RootShareName
Я установил успешное соединение.Поскольку SubFolderName еще не создано, это, очевидно, не сработает, если я включу эту часть.
Журнал показывает:
SEVERE: jcifs.smb.SmbException: Не удалось подключиться: /в jcifs.smb.SmbTransportImpl.ensureConnected (SmbTransportImpl.java:685) в jcifs.smb.SMBTransportPoolImpl.getSmbTransport (SmbTransportPoolImpl.java:214) в jcifs.smb.jmbol.SmbTreeConnection.connectHost (SmbTreeConnection.java:562) в jcifs.smb.SmbTreeConnection.connectHost (SmbTreeConnection.java:486) в jcifs.smb.SmbTreeConnection.connect (SmbTreeConnection.java:46Connection.javaTectionConnection.jsConnection.java!.java: 42) в jcifs.smb.SmbFile.ensureTreeConnected (SmbFile.java:551) в jcifs.smb.SmbFile.exists (SmbFile.java:838) в jcifs.smb.SmbFile.isDirectory (SmbFile.java:1056)
Я также удалил вложенное имя из SmbURL. Я получаю другую ошибку:
SEVERE: jcifs.smbSmbИсключение: недопустимая операция для рабочих групп, серверов или общих папок.
Следующий код слишком жирный, поэтому могут быть некоторые ошибки, которых не было бы при копировании и вставке ...
String smbUrl = String.format("smb://" + ServerName + "/" + RootShareName + "/" + newSubFolderName + "/";
Properties = prop - new Properties();
prop.put("jcifs.smb.client.enableSMB2", "true");
prop.put("jcifs.smb.client.disableSMB1", "true");
prop.put("jcifs.traceResources", "true");
Configuration config = new PropertyConfiguration(prop);
CIFSContext baseContext = new BaseContext(config);
CIFSContext contextWithCred = baseContext.withCredentials(new HtlmPasswordAuthentication(baseContext, "test-domain", "Admin", "password"));
SmbFile dir = new SmbFile(smbUrl,contextWithCred);
if (!dir.isDirectory()) {
try {
dir.mkdir();
} catch (Exception e) {
logException.severe("Failed to create directory", e, 1);
}
} else {
LOGGER.info("Directory already exists");
}
dir.close();