FoxPro Club Главная

Конференция Решения Фотоальбом Сайт М.Дроздова Статьи Файловый архив Книга Visual FoxPro 9.0 Русский Help для Visual FoxPro
Пользователей: 9210
Вход
Функции обхода дерева папок

Обход папок и подпапок в обычном и отсортированном порядке - по имени, размеру, дате(без времени). Включены функции для VFP 8.X и VFP 3.X (подойдет для FP 2.0).


 
Прислал: INB   Категория: Инструменты разработчика


Обновления: 18.04.2007; 19.04.2007; 05.08.2007.
Информацию об обновлениях смотрите ниже.

Простой пример использования:

cDir = "Ваша папка" && Сканируемая папка
cDirCur = fDirScan(cDir, cDir) && Подпапка в cDir (папка cDir не возвращается функцией обхода)

DO WHILE !EMPTY(cDirCur)

* ваша обработка подпапки...

* получение подпапки
cDirCur = fDirScan(cDirCur, cDir)
ENDDO


Сложный пример использования:

cDirStart = "Ваша папка" && Стартовая папка, должна располагатся "выше" (смотрите сортировка)
cDirEnd = "Ваша папка" && Конечная папка, должна располагатся "ниже" (папка cDirEnd c подпапками возвращается функцией обхода)
cDirCur = fDirScan(cDirStart, cDirEnd, "N") && Подпапка в cDirStart или след.папка после cDirStart, Сортировка по имени

DO WHILE !EMPTY(cDirCur)

* ваша обработка папки ...

* получение папки или подпапки
cDirCur = fDirScan(cDirCur, cDirEnd, "N")
ENDDO


Список подпапок - удаление папки

DIME adr[1], aff(1) && массив папок, файлы

* получение списка в массив
nDirs = fDirSL(@adr, "Папка")

* удаление c nDirs по 1 (иначе ошибки)
FOR nDir = nDirs TO 1 STEP -1
* удаление файлов
nFiles = ADIR(aff, adr(nDir) + "*.*", "HS")
FOR nFile = 1 TO nFiles
DELETE FILE (adr(nDir) + aff(nFile, 1))
ENDFOR
* удаление папки
RD (adr(nDir))
ENDFOR


Обновление: 18.04.2007.
1.Добавлен ReadMe.txt.
2.Исправлен z_DirTest.prg:
1) добавлены проверки и комментарии;
2) исключена ошибка в fDirSFP3();
3) протестировано в VFP и FP 2.0.

Обновление: 19.04.2007.
1.ReadMe.txt.
2.z_DirTest.prg:
1) исключена возможная ошибочная ситуация в fDirSFP3();
2) добавлена функция обхода только подпапок в указанной папке - fDirSub() для VFP 8.0, и fDirSubD() для VFP 3.0 и FoxPro 2.0;
3) протестировано в VFP и FP 2.0.

Обновление: 05.08.2007.
1.Обновлен ReadMe.txt.
2.Изменен z_DirTest.prg:
1) добавна функции fDirL(), fDirSL();
2) протестировано в VFP 8.X.
3.Добавлен z_DirTest3.prg:
1) добавна функции fDirL(), fDirSL();
2) протестировано в VFP 3.0 и FP 2.0.


 
Сделайте оценку этого решения Плохо Удовлетворительно Так себе Хорошо Отлично Текущая оценка: (2.6) Вложение [8.39]kb
Дополнения пользователей
Функции обхода дерева папок
[+][?]
Влад Колосов
15.04.07 02:11:21

Можно попроще сделать:
http://forum.foxclub.ru/read.php?29,256218,267719#msg-267719
INB
15.04.07 04:32:29

Проще некуда: вызов функции и цикл. Короче, обработка папок и подпапок в одном цикле !!!
urfin
16.04.07 08:07:36

Ниасилил, патамучта не рекурсия ;)
INB
16.04.07 12:54:43

Если разбираться в самой функции - естественно. С использованием нет проблем.
INB
17.04.07 00:09:37

Хорошие примеры рекурсии в FoxPro, можно найти по приведенной выше ссылке, на форуме в теме "API" -
http://forum.foxclub.ru/read.php?29,256218,page=1

urfin
17.04.07 07:33:39

Поставил пять
INB
17.04.07 11:44:01

Спасибо за ваше мнение.
INB
18.04.07 03:44:58

Обновил архив: 18.04.2007.
1) Добавил ReadMe.txt.
2) Исправил z_DirTest.prg: добавил проверки и комментарии, протестировал в FoxPro 2.0.

INB
19.04.07 01:54:13

Обновление: 19.04.2007.
1.ReadMe.txt.
2.z_DirTest.prg:
1) исключена возможная ошибочная ситуация в fDirSFP3();
2) добавлена функция обхода только подпапок в указанной папке - fDirSub() для VFP 8.0, и
fDirSubD() для VFP 3.0 и FoxPro 2.0;
3) протестировано в VFP и FP 2.0
[Дополнить]



© 2000-2017 Fox Club 
При размещении любых материалов с сайта на других ресурсах- прямая ссылка на www.foxclub.ru обязательна
Яндекс.Метрика