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

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

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

Хотя, может быть, ТС так и делает... Как-то упустил при первом прочтении, что
авторПробовал рекурсивно с ADIR() с записью в DBF
...
Рейтинг: 0 / 0
08.12.2011, 08:51
    #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
08.12.2011, 09:21
    #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
08.12.2011, 10:15
    #37564511
Список файлов на диске
тынц
...
Рейтинг: 0 / 0
08.12.2011, 10:43
    #37564557
ENDOFUSSR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список файлов на диске
Спасибо всем кто ответил.
Только при чтении 36 тысяч файлов в папке массив переполняется, а таких папок ДЕСЯТКИ.
вот поэтому хотелось бы работать без массивов.
...
Рейтинг: 0 / 0
08.12.2011, 14:16
    #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
08.12.2011, 14:52
    #37565328
P003
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список файлов на диске
Првая сточка файла ?
...
Рейтинг: 0 / 0
08.12.2011, 15:25
    #37565432
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список файлов на диске
> Автор: ENDOFUSSR
> Только при чтении 36 тысяч файлов в папке массив переполняется, а таких папок ДЕСЯТКИ.

Попробуй FSO

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

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


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