powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Список файлов на диске
17 сообщений из 17, страница 1 из 1
Список файлов на диске
    #37564012
ENDOFUSSR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!.
Есть диск, на нем куча папок с разным количеством вложенных подпапок в каждой подпапке несколько ТЫСЯЧ файлов *.txt.
Как бы сделать список этих файлов c привязкой к имени папки, где они находятся?

Пробовал рекурсивно с ADIR() с записью в DBF - увял на 57 тысяче записей.

Как бы без массивов обойтись?
Кто поможет?
...
Рейтинг: 0 / 0
Список файлов на диске
    #37564339
Guest0007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Самый простой способ - filer.dll
...
Рейтинг: 0 / 0
Список файлов на диске
    #37564354
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем конкретно ADIR() с массивами не устроил?
...
Рейтинг: 0 / 0
Список файлов на диске
    #37564358
Dima TЧем конкретно ADIR() с массивами не устроил?
Я так думаю, у ТС оперативная память кончилась и начались свопы на жесткий диск. А это крайне медленно...
По теме - надо периодически скидывать данные массивов в табличку и чистить массивы. То есть хранить во время работы утилиты в массивах только папки/каталоги, а имена файлов сразу после получения складывать в таблицу/курсор и "отдавать память" для следующей итерации...
...
Рейтинг: 0 / 0
Список файлов на диске
    #37564359
Станислав С...кий,

Хотя, может быть, ТС так и делает... Как-то упустил при первом прочтении, что
авторПробовал рекурсивно с ADIR() с записью в DBF
...
Рейтинг: 0 / 0
Список файлов на диске
    #37564390
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Станислав С...кий,

Приходилось использовать:

CREATE TABLE e:\test FREE ( ;
name_file C(250),;
size_file I)

lcCurDir = GETDIR()
path_for_file = lcCurDir
SET DEFAULT TO '&lcCurDir'
CD '&lcCurDir'
Recurse(lcCurDir)
CHDIR &lcCurDir.

*!* ===========================================================
FUNCTION Recurse
*!* ===========================================================
LPARAMETERS pcDir
LOCAL lnPtr, lnFileCount, laFileList, lcDir, lcFile
CHDIR (pcDir)
DIMENSION laFileList[1]
*--- Read the chosen directory.
lnFileCount = ADIR(laFileList, '*.*', 'D', 1)
FOR lnPtr = 1 TO lnFileCount
IF 'D' $ laFileList[lnPtr, 5]
*--- Get directory name.
lcDir = laFileList[lnPtr, 1]
*--- Ignore current and parent directory pointers.
IF lcDir != '.' AND lcDir != '..'
path_for_file = SYS(5) + SYS(2003) + "\"
*--- Call this routine again.
Recurse(lcDir)
ENDIF
ELSE
path_for_file = SYS(5) + SYS(2003) + "\"
*--- Get the file name.
lcFile = RTRIM(laFileList[lnPtr, 1])
lnSize = laFileList[lnPtr, 2]
INSERT INTO test VALUES ( ;
path_for_file + lcFile, ;
lnSize)
ENDIF
ENDFOR
*--- Move back to parent directory.
CHDIR ..
path_for_file = SYS(5) + SYS(2003) + "\"
...
Рейтинг: 0 / 0
Список файлов на диске
    #37564421
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorNG, немного подправлю, переходы по папкам это лишнее, ADIR() может с путями работать:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
CREATE CURSOR test ( ;  
  	name_file C(250),;  
  	size_file I)  
    
  lcCurDir = GETDIR()  
  Recurse(lcCurDir)  
 
 sele test
 brow
    
 *!* ===========================================================  
  FUNCTION Recurse  
 *!* ===========================================================  
  LPARAMETERS pcDir  
  LOCAL lnPtr, lnFileCount, laFileList, lcDir, lcFile  
  DIMENSION laFileList[1]  
 *--- Read the chosen directory.  
  lnFileCount = ADIR(laFileList, addbs(pcDir) + '*.*', 'D', 1)  
  FOR lnPtr = 1 TO lnFileCount  
  	IF 'D' $ laFileList[lnPtr, 5]  
 		*--- Get directory name.  
  		lcDir = laFileList[lnPtr, 1]  
 		*--- Ignore current and parent directory pointers.  
  		IF lcDir != '.' AND lcDir != '..'  
 			*--- Call this routine again.  
  			Recurse(addbs(pcDir) + lcDir)  
  		ENDIF  
  	ELSE  
 		*--- Get the file name.  
  		lcFile = RTRIM(laFileList[lnPtr, 1])  
  		lnSize = laFileList[lnPtr, 2]  
  		INSERT INTO test VALUES (       ;  
  			addbs(pcDir) + lcFile, ;  
  			lnSize)  
  	ENDIF  
  ENDFOR



В остальном это классическое решение. Непонятно чем оно топикстартера не устроило.
...
Рейтинг: 0 / 0
Список файлов на диске
    #37564511
тынц
...
Рейтинг: 0 / 0
Список файлов на диске
    #37564557
ENDOFUSSR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем кто ответил.
Только при чтении 36 тысяч файлов в папке массив переполняется, а таких папок ДЕСЯТКИ.
вот поэтому хотелось бы работать без массивов.
...
Рейтинг: 0 / 0
Список файлов на диске
    #37565225
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ENDOFUSSRСпасибо всем кто ответил.
Только при чтении 36 тысяч файлов в папке массив переполняется, а таких папок ДЕСЯТКИ.
В CONFIG.FPW добавь
Код: sql
1.
MVCOUNT = 65000


это макс.количество переменных, правда оно не бесконечно:
HELPSets the maximum number of variables that Visual FoxPro can maintain. This value can range from 128 to 65,000.

Default: 16,384
...
Рейтинг: 0 / 0
Список файлов на диске
    #37565328
P003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Првая сточка файла ?
...
Рейтинг: 0 / 0
Список файлов на диске
    #37565432
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: ENDOFUSSR
> Только при чтении 36 тысяч файлов в папке массив переполняется, а таких папок ДЕСЯТКИ.

Попробуй FSO

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Список файлов на диске
    #37565673
ENDOFUSSR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пользовал FSO для кууууууучи файлов - нормально, но не могу дотумкать как рекурсивно использовать для списка папок с вложениями. Только без вложений читаю, копирую, создаю, удаляю уже давно.
Может пример кода для вспоможения...
...
Рейтинг: 0 / 0
Список файлов на диске
    #37565694
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ENDOFUSSRПользовал FSO для кууууууучи файлов - нормально, но не могу дотумкать как рекурсивно использовать для списка папок с вложениями. Только без вложений читаю, копирую, создаю, удаляю уже давно.
Может пример кода для вспоможения...
Выше рекурсия с ADIR() - замени ADIR() на FSO.
...
Рейтинг: 0 / 0
Список файлов на диске
    #37566300
P003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, ты дЭбил ?
...
Рейтинг: 0 / 0
Список файлов на диске
    #37566317
ENDOFUSSR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот слепил. Но не знаю как выйти.
Вроде нормальный список, но за последней папкой идет снова первая. Потом программная ошибка.
Кто посмотрит? Исходник прилеплен.
...
Рейтинг: 0 / 0
Список файлов на диске
    #37566412
ENDOFUSSR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все! Разобрался. 165347 файлов в 4-х папках на сетевом диске за 21 минуту.

Всем спасибо. Тема закрыта.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Список файлов на диске
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]