BEST logo логотип компании БЭСТ - программы для бизнеса ПРОДАЖИ
+7 (991) 312-04-37
trade@bestnet.ru
ПОДДЕРЖКА
+7 (495) 775-66-76
consult@bestnet.ru
СКАЧАТЬ
Обновления
Дистрибутивы
Авторизация

Логин:
Пароль:
Забыли свой пароль?
Регистрация
ВАШ ВОПРОС

Доступ к Личному кабинету закрыт!
Как получить доступ?


Главная  / Поддержка  / Форум  / Публичные форумы  / Программирование приложений  / Путь к каталогам разной глубины вложенности

Форум

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Путь к каталогам разной глубины вложенности
 
Здравствуйте!
В плагине надо получить полный путь ко всем файлам ,находящихся как в корневой папке, так и во вложенных
в нее подкаталогах.
Попробовал "покрутить" функцию Directory(_Path_Schabl+'*.*','HSD'), где _Path_Schabl-путь к корневой папке.
Но она возвращает в виде массива только каталоги 1-го уровня вложенности. Дальше ничего не видит.
С помощью чего можно решить проблему?
 
Чтобы было проще, предварительно составьте список всех каталогов, начиная с текущего.
Для этого напишите рекурсивную функцию, используя directory().
Вторым параметром в directory() можно передавать атрибут 'D', тогда функция будет возвращать только вложенные каталоги.
После получения списка всех каталогов перебирайте их и запрашивайте файлы.
С уважением, Новиков Алексей.
 
Цитата
Алексей Новиков пишет:
Чтобы было проще, предварительно составьте список всех каталогов, начиная с текущего.
Для этого напишите рекурсивную функцию, используя directory().
Вторым параметром в directory() можно передавать атрибут 'D', тогда функция будет возвращать только вложенные каталоги.
После получения списка всех каталогов перебирайте их и запрашивайте файлы.
Я так пробовал.
Но этот вариант работает когда заранее известно количество уровней вложенности.
Я как быть когда заранее не известно количество уровней вложенности?
 
https://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D1%8F#.D0.92_.D0.BF.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D0.BC.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B8

Вот как то так: (без компиляции и тестирования)

private aSubDir


function GetSubDir(cPath)
memvar aSubDir
local aDir

aadd(aSubDir, cPath)
aDir:=aDirectory(cPath, 'D')
aeval(aDir, {|x| if(x[1]<>'.' .and. x[1]<>'..', GetSubDir(cPath+x[1]+'\')) })

return nil


aSubDir:={}
GetSubDir('c:\')
С уважением, Новиков Алексей.
 
Большое Спасибо!
 
Еще забыл спросить!
В каких случаях необходимо объявлять переменную как memvar ?
 
В случае, если эта переменная объявлена как private, public или static. (насчёт static не уверен, не помню их зону видимости)
memvar необходимо для того, чтобы не уточнять квалификацию этой переменной через "m->" везде, где она встречается.
Но это только для поклонников кода без предупреждений. По-умолчанию, компилятор считает переменную, не описанную в этой функции, как private, а runtime создаёт её при первом присваивании.
С уважением, Новиков Алексей.
 
Может кому интересно.
Несмотря на наличие параметра "D" Directory(cPath, 'D') , отбирает еще и файлы.
Поэтому пришлось переписать выражение вот так:
Код
aeval(aDir, {|x| if(x[1]<>'.' .and. x[1]<>'..' .and. substr(x[1],-4,1)<>'.', GetSubDir(cPath+x[1]+'\'),) })
 
Тогда все работает,т.е. отбирает только подкаталоги
Страницы: 1
Читают тему (гостей: 1)