это типа получать список файлов в каталоге?
а не проще в шел команду сунуть?
в вянде dir /s b /o
в никсах - подходящий вариант ls или find (зависит от цели получения списка)
lmike - фи, как неспортивно!


от первоначального топика (

🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»
🛡 Научитесь находить и использовать уязвимости веб-приложений.
🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.Доступ открыт прямо сейчас — Записаться бесплатно
это типа получать список файлов в каталоге?
а не проще в шел команду сунуть?
в вянде dir /s b /o
в никсах - подходящий вариант ls или find (зависит от цели получения списка)
да запростоЯ то уж думал че-ть на LS2J родится
import java.io.File;
import java.util.ArrayList;
public class DirProcess {
private static ArrayList arrFiles = new ArrayList();
public String[] Result() {
String[] result = new String[arrFiles.size()];
arrFiles.toArray(result);
return result;
}
public void visitAllDirsAndFiles(String dir){
arrFiles.clear();
visitAllDirsAndFiles(new File(dir));
}
public void visitAllDirs(String dir) {
arrFiles.clear();
visitAllDirs(new File(dir));
}
private void process(File dir) {
System.out.println(dir);
arrFiles.add(dir.toString());
}
public void visitAllDirsAndFiles(File dir) {
process(dir);
if (dir.isDirectory()) {
String[] children = dir.list();
for (int i = 0; i < children.length; i++)
visitAllDirsAndFiles(new File(dir, children));
}
}
// Process only directories under dir
public void visitAllDirs(File dir) {
if (dir.isDirectory()) {
process(dir);
String[] children = dir.list();
for (int i = 0; i < children.length; i++)
visitAllDirs(new File(dir, children));
}
}
// Process only files under dir
public void visitAllFiles(File dir) {
if (dir.isDirectory()) {
String[] children = dir.list();
for (int i = 0; i < children.length; i++)
visitAllFiles(new File(dir, children));
}
else
process(dir);
}
public static void main(String args[]) {
DirProcess dirproc = new DirProcess();
dirproc.visitAllFiles(new File("myStartFolder"));
}
}
Особенность реализации LS-функции Dir - при попытке использовать её рекурсивно (Dir$ внутри Dir) вылетает ошибка "и ещё...
мне совершенно не понятно - почему не используется рекурсия, для интерпретируемых языков - это обычная практика (ибо стек, формально, не ограничен)
'library DirProcess.LS2J
Option Public
Option Declare
Uselsx "*lsxlc"
Use "ErrorHandling"
Use "DirProcess"
Const ERRBASE_DIRPROCESS = 1130
Private Const ERRLS2JINIT = ERRBASE_DIRPROCESS+1, CS_ERRLS2JINIT = {ошибка инициализации класса Java}
Class DirObj As ErrorHandlerWJ
Private DirProcObj As JavaObject
Private DirProcClass As JavaClass
Sub New()
On Error Goto errorhandler
Set DirProcClass = jSession.GetClass("DirProcess")
Set DirProcObj = DirProcClass.CreateObject
ExitFunction:
Exit Sub
errorhandler:
Call Me.RaiseError()
Error ERRLS2JINIT, CS_ERRLS2JINIT
End Sub
Public Function Result() As Variant
Result = DirProcObj.Result()
End Function
Public Sub VisitAllDirsAndFiles(startDir As String)
On Error Goto errorhandler
Call DirProcObj.visitAllDirsAndFiles(startDir)
ExitFunction:
Exit Sub
errorhandler:
Call Me.RaiseError()
Resume ExitFunction
End Sub
Public Sub VisitAllDirs(startDir As String)
On Error Goto errorhandler
Call DirProcObj.visitAllDirs(startDir)
ExitFunction:
Exit Sub
errorhandler:
Call Me.RaiseError()
Resume ExitFunction
End Sub
End Class
Option Public
Option Declare
Use "DirProcess.LS2J"
Sub Initialize
Dim dirProc As New DirObj
Call dirProc.visitAllDirs(".\data")
Dim result
result = dirProc.Result
Forall m In result
Print Cstr(m)
End Forall
End Sub
%REM
Library FS
Description: функционал для работы с файловой системой
%END REM
Uselsx "*javacon"
Private jSession As JavaSession
Private jDirProcCls As JavaClass
Private Function initDirProcess() As JavaObject
On Error Goto ErrH
Static jDirProcObj As JavaObject
If jDirProcObj Is Nothing Then
Set jSession = New JavaSession()
Set jDirProcCls = jSession.GetClass("DirProcess")
Set jDirProcObj = jDirProcCls.CreateObject
End If
Set initDirProcess = jDirProcObj
Exit Function
ErrH:
'свой обработчик (по желанию)
Exit Function
End Function
Public Function GetSubFiles(startDir As String)
On Error Goto ErrH
GetSubFiles = initDirProcess().visitAllDirs(startDir)
Exit Function
ErrH:
'свой обработчик
Exit Function
End Function
сразу в переменную результат взять и пользовать эту переменную сколько угодно?-ф-ции обхода ФС "сбрасывают" массив, а использовать результат я могу захотеть неоднократно
у меня в коде также происходит: Private в Declarations (можно не людить гл.пер, но в этом случае, по моему, это оправдано) и Static.-инициализация джава объектов, при каждом вызове - мне не очень нра
-класс хранит инстанс джава объекта и стало-быть - собственная жизнь (в рамках приложения), что бывает удобно (при одновременном использовании нескольких)
так и есть - в ArrayList ...сразу в переменную результат взять и пользовать эту переменную сколько угодно?
Public Function VisitAllDirsAndFiles(startDir As String) As Variant
...
Call DirProcObj.visitAllDirsAndFiles(startDir)
Me.VisitAllDirsAndFiles = DirProcObj.Result()
...
End Function
Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab