|
Список файлов на диске
|
|||
---|---|---|---|
#18+
Всем привет!. Есть диск, на нем куча папок с разным количеством вложенных подпапок в каждой подпапке несколько ТЫСЯЧ файлов *.txt. Как бы сделать список этих файлов c привязкой к имени папки, где они находятся? Пробовал рекурсивно с ADIR() с записью в DBF - увял на 57 тысяче записей. Как бы без массивов обойтись? Кто поможет? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2011, 21:44 |
|
Список файлов на диске
|
|||
---|---|---|---|
#18+
Самый простой способ - filer.dll ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 05:45 |
|
Список файлов на диске
|
|||
---|---|---|---|
#18+
Чем конкретно ADIR() с массивами не устроил? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 07:06 |
|
Список файлов на диске
|
|||
---|---|---|---|
#18+
Dima TЧем конкретно ADIR() с массивами не устроил? Я так думаю, у ТС оперативная память кончилась и начались свопы на жесткий диск. А это крайне медленно... По теме - надо периодически скидывать данные массивов в табличку и чистить массивы. То есть хранить во время работы утилиты в массивах только папки/каталоги, а имена файлов сразу после получения складывать в таблицу/курсор и "отдавать память" для следующей итерации... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 07:32 |
|
Список файлов на диске
|
|||
---|---|---|---|
#18+
Станислав С...кий, Хотя, может быть, ТС так и делает... Как-то упустил при первом прочтении, что авторПробовал рекурсивно с ADIR() с записью в DBF ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 07:35 |
|
Список файлов на диске
|
|||
---|---|---|---|
#18+
Станислав С...кий, Приходилось использовать: 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) + "\" ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 08:51 |
|
Список файлов на диске
|
|||
---|---|---|---|
#18+
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.
В остальном это классическое решение. Непонятно чем оно топикстартера не устроило. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 09:21 |
|
Список файлов на диске
|
|||
---|---|---|---|
#18+
Спасибо всем кто ответил. Только при чтении 36 тысяч файлов в папке массив переполняется, а таких папок ДЕСЯТКИ. вот поэтому хотелось бы работать без массивов. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 10:43 |
|
Список файлов на диске
|
|||
---|---|---|---|
#18+
ENDOFUSSRСпасибо всем кто ответил. Только при чтении 36 тысяч файлов в папке массив переполняется, а таких папок ДЕСЯТКИ. В CONFIG.FPW добавь Код: sql 1.
это макс.количество переменных, правда оно не бесконечно: HELPSets the maximum number of variables that Visual FoxPro can maintain. This value can range from 128 to 65,000. Default: 16,384 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 14:16 |
|
Список файлов на диске
|
|||
---|---|---|---|
#18+
Првая сточка файла ? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 14:52 |
|
Список файлов на диске
|
|||
---|---|---|---|
#18+
> Автор: ENDOFUSSR > Только при чтении 36 тысяч файлов в папке массив переполняется, а таких папок ДЕСЯТКИ. Попробуй FSO Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 15:25 |
|
Список файлов на диске
|
|||
---|---|---|---|
#18+
Пользовал FSO для кууууууучи файлов - нормально, но не могу дотумкать как рекурсивно использовать для списка папок с вложениями. Только без вложений читаю, копирую, создаю, удаляю уже давно. Может пример кода для вспоможения... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 16:32 |
|
Список файлов на диске
|
|||
---|---|---|---|
#18+
ENDOFUSSRПользовал FSO для кууууууучи файлов - нормально, но не могу дотумкать как рекурсивно использовать для списка папок с вложениями. Только без вложений читаю, копирую, создаю, удаляю уже давно. Может пример кода для вспоможения... Выше рекурсия с ADIR() - замени ADIR() на FSO. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 16:36 |
|
Список файлов на диске
|
|||
---|---|---|---|
#18+
Dima T, ты дЭбил ? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 21:59 |
|
Список файлов на диске
|
|||
---|---|---|---|
#18+
Вот слепил. Но не знаю как выйти. Вроде нормальный список, но за последней папкой идет снова первая. Потом программная ошибка. Кто посмотрит? Исходник прилеплен. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2011, 22:15 |
|
|
start [/forum/topic.php?fid=41&fpage=64&tid=1583948]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 253ms |
total: | 391ms |
0 / 0 |