Библиотека hierynomus/smbj: как я могу рекурсивно перечислить все подпапки?Android

Форум для тех, кто программирует под Android
Ответить
Гость
 Библиотека hierynomus/smbj: как я могу рекурсивно перечислить все подпапки?

Сообщение Гость »


Я создал этот базовый фрагмент в надежде рекурсивно перечислить все подпапки в приложении Android API уровня 30, начиная с общей папки, которая у меня есть в Windows 10:

Код: Выделить всё

package com.derozer.myapp;

import com.hierynomus.msfscc.FileAttributes;
import com.hierynomus.msfscc.fileinformation.FileIdBothDirectoryInformation;
import com.hierynomus.protocol.commons.EnumWithValue;
import com.hierynomus.smbj.auth.AuthenticationContext;
import com.hierynomus.smbj.connection.Connection;
import com.hierynomus.smbj.session.Session;
import com.hierynomus.smbj.share.DiskShare;
import com.hierynomus.smbj.SMBClient;
import com.derozer.myapp.models.TaskCallback;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;

public class WindowsConnection {
private final String ipAddress = "192.168.1.8";
private final String username = "MyUsername";
private final String password = "MyPassword";
private final String sharedFolder = "DocumentsShared";
private final Executor executor = Executors.newSingleThreadExecutor();
List subDirectories = new ArrayList();
DiskShare share;

public void executeAsyncTask(TaskCallback onSuccess, TaskCallback onFailure) {
FutureTask taskSyncFiles = new FutureTask(() -> {
try (SMBClient client = new SMBClient(); Connection connection = client.connect(ipAddress)) {
AuthenticationContext auth = new AuthenticationContext(username, password.toCharArray(), null);
Session session = connection.authenticate(auth);
share = (DiskShare) session.connectShare(sharedFolder);

addSubFolders("");
int count = subDirectories.size();
} catch (Exception err) {
err.printStackTrace();
} finally {
share.close();
}

return true;
});

executor.execute(taskSyncFiles);
executor.execute(() -> {
try {
Boolean result = taskSyncFiles.get();
onSuccess.execute(result);
} catch (Exception err) {
onFailure.execute(err);
}
});
}

private void addSubFolders(String folderName) {
try {
List fileList = share.list(folderName);
for (FileIdBothDirectoryInformation file : fileList) {
String filename = file.getFileName();
if (".".equals(filename) || "..".equals(filename)) {
continue;
}
if (EnumWithValue.EnumUtils.isSet(file.getFileAttributes(), FileAttributes.FILE_ATTRIBUTE_DIRECTORY)) {
String folderPath = folderName + "\\" + filename;
addSubFolders(folderPath);
subDirectories.add(folderPath);
}
}
} catch (Exception err) {
err.printStackTrace();
}
}
}
It list the first levels directories of \192.168.1.8\DocumentsShared (i.e. \folder1, \folder2, and so on), but once I start to .list() on a subfolder (i.e. folder1 list), I got this error:

Код: Выделить всё

com.hierynomus.mssmb2.SMBApiException: STATUS_INVALID_PARAMETER (0xc000000d): Create failed for \\192.168.1.8\DocumentsShared\\folder 1
Where am I wrong? I'm using

Код: Выделить всё

implementation 'com.hierynomus:smbj:0.9.1'
.
Thanks for any hints!
To list the folders recursively, but the api seems broken.


Источник: https://stackoverflow.com/questions/781 ... ecursively
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»