Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/125: Рейтинг темы: голосов - 125, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 05.07.2007
Сообщений: 102

Как перебрать все подкаталоги

14.08.2008, 17:20. Показов 23627. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Code
1
2
3
4
5
6
7
    Dim fileNameArray As String
fileNameArray = Dir$("C:\TEMP\", 0)
Do While fileNameArray <> ""
Print fileNameArray
fileNameArray = Dir$()
Loop
Exit Function
Вот так перебираются файлы в каталоге C:\TEMP. Но:


Code
1
2
3
4
5
6
7
    Dim fileNameArray As String
fileNameArray = Dir$("C:\TEMP\", 16)
Do While fileNameArray <> ""
Print fileNameArray
fileNameArray = Dir$()
Loop
Exit Function
к моему удивлению перебираются таким образом не только подкаталоги, но и файлы. А как мне выделить только подкаталоги ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.08.2008, 17:20
Ответы с готовыми решениями:

как мне обойти все подкаталоги данного каталога.?
помогите плз разобраться с директориями. вот как мне обойти все подкаталоги данного каталога.?

Как удалить абсолютно все файлы и подкаталоги в выбранной папке?
Приветствую! Собственно сабж :) Конкретно, мне нужно полностью опустошить папку C:\Windows\Temp\... Как это можно сделать? Использую...

Как перебрать все CheckBox'
добрый день, подскажите...Как перебрать все условия ??? Это для 2) а как сделать для 8 CheckBox??? Спасибо)

17
1 / 1 / 0
Регистрация: 04.08.2006
Сообщений: 2,950
14.08.2008, 17:23
PavelT100
втарой параметр в Dir

Dir[$] [ ( fileSpec [ , attributeMask ] ) ]

Mask File attribute Constant
0 Normal file ATTR_NORMAL
2 Hidden file ATTR_HIDDEN
4 System file ATTR_SYSTEM
8 Volume label ATTR_VOLUME. If any other attribute is specified, ATTR_VOLUME is ignored.
16 Directory ATTR_DIRECTORY
0
0 / 0 / 0
Регистрация: 05.07.2007
Сообщений: 102
14.08.2008, 17:29
Цитата Сообщение от Morpheus
16 Directory ATTR_DIRECTORY
Вот именно так я и сделал, и поставил вторым параметром 16, а мне вернули и каталоги и файлы.
0
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
14.08.2008, 17:41
Хелп говорит:


Dir$ always returns the names of normal files. To include other files in the returned list of file names, specify the sum of those values in the following table that correspond to the desired kinds of files:
Т.е. этот параметр указывает что еще добавить к списку файлов. В твоём случае к списку файлов добавляется список папок.
Решение очевидно. Получить пересечение 2х списков(с папками и без).
0
0 / 0 / 0
Регистрация: 05.07.2007
Сообщений: 102
14.08.2008, 17:46
Цитата Сообщение от Medevic
Решение очевидно. Получить пересечение 2х списков(с папками и без).
Эх, в моем случае я даже могу просто удалять файлы, а потом заняться обработкой подкаталогов, но я думал можно как то проще это сделать, без поиска пересечений.
0
0 / 0 / 0
Регистрация: 26.06.2006
Сообщений: 143
14.08.2008, 19:26
Если работаешь под Windows, то можешь использовать FileSystemObject.

Пример с рекурсией (перебирающий все поддиректории в заданной):


Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub Initialize
 
Dim objFSO As Variant
Dim objRootFolder As Variant
Dim rootFolder As String
 
rootFolder = "C:\Test"
 
Set objFSO = CreateObject( "Scripting.FileSystemObject" )
Set objRootFolder = objFSO.GetFolder( rootFolder )
Call GetDir_Recurse( objRootFolder )
 
End Sub
 
Sub GetDir_Recurse( SrcFolder )
 
Dim arrSubfolders As Variant
Set arrSubfolders = SrcFolder.SubFolders
Forall currentFolder In arrSubfolders
Print currentFolder.Name
Call GetDir_Recurse( currentFolder )
End Forall
 
End Sub
Если надо перебирать только поддиректории 1-го уровня, то убираешь рекурсию и все.


Как вариант еще можно и с помощью Dir проходить по директории и с помощью WinAPI проверять директория ли это.


Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Const FILE_ATTRIBUTE_DIRECTORY = 16
Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (Byval lpFileName As String) As Long
 
Sub Initialize
 
Dim fileNameArray As String
Dim rootFolder As String
 
rootFolder = "C:\Test\"
fileNameArray = Dir$( rootFolder, 16 )
 
Do While fileNameArray <> ""
If IsDir( rootFolder & fileNameArray ) Then Print fileNameArray
fileNameArray = Dir$()
Loop
End Sub
 
Function IsDir( srcFolder )
 
IsDir = False
If GetFileAttributes( srcFolder ) = FILE_ATTRIBUTE_DIRECTORY Then IsDir = True
 
End Function
Только когда проходишь по директориям не забывай пропускать "." и "..".
0
1 / 1 / 0
Регистрация: 04.08.2006
Сообщений: 2,950
14.08.2008, 19:30
Цитата Сообщение от PavelT100
Вот именно так я и сделал, и поставил вторым параметром 16, а мне вернули и каталоги и файлы.
ну правильно,...

Medevic правильно сослался на хэлп, так и есть. атрибут ДОБАВЛЯЕТ к нормальным файлам и другие элементы

НО! ведб можно определить атрибуты самого файла
GetFileAttr
Пример их хэлпа


This example creates a file, calls SetFileAttr to set yts attributes to Read-Only, System, and Hidden, and then calls GetFileAttr to determine the file attributes.


Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
%Include "lsconst.lss"
Dim fileNum As Integer, attr As Integer
Dim fileName As String, msg As String
fileNum% = FreeFile()
fileName$ = "data.txt"
Open fileName$ For Output As fileNum%
Close fileNum%
SetFileAttr fileName$, ATTR_READONLY + ATTR_SYSTEM + _ ATTR_HIDDEN
attr% = GetFileAttr(fileName$)
If (attr% And ATTR_READONLY) Then
msg$ = msg$ & " Read-Only "
Else
msg$ = msg$ & " Normal "
End If
If (attr% And ATTR_HIDDEN)  Then msg$ = msg$ & " Hidden "
If (attr% And ATTR_SYSTEM)  Then msg$ = msg$ & " System "
If (attr% And ATTR_DIRECTORY) Then msg$ = msg$ & " Directory "
Print msg$
SetFileAttr fileName$, ATTR_NORMAL  Reset to normal.
Kill fileName$
0
0 / 0 / 0
Регистрация: 26.06.2006
Сообщений: 143
17.08.2008, 13:36
Эх, знал бы про GetFileAttr раньше, не заморачивался бы с WinAPI. А то как-то раз столько времени на это дело потратил... ;-)
0
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 185
13.02.2017, 18:26
Добрый вечер.

Подскажите пожалуйста, столкнулся со следующей дилеммой:
Есть сетевая шара с файлами. Перебираю их через CreateObject({Scripting.FileSystemObject }). Нужно отсеять системные файлы...
GetFileAttr, FileSystemObject.Attributes, да и GetFileAttributes(как в примере с kernel32) возвращают сумму констант, отвечающих за разные атрибуты. Т.е. в моем случае, у системного файла помимо признака System(4) стоит еще атрибут Archive(32). Как итог, запрашивая атрибуты всеми способами получаю цифру 36. Печаль в том, что все файлы в этой директории имеют архивный атрибут. Как в таком случае однозначно идентифицировать системный файл?
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
13.02.2017, 18:58
Цитата Сообщение от Eugen
Как в таком случае однозначно идентифицировать системный файл
что есть системный файл? Это понятие устарело этак лет 15-20 назад


--- Добавлено 14 фев 2017. Первое сообщение размещено 14 фев 2017 ---

прочекать файлы на предмет их "нормальности" можно так https://docs.oracle.com/javase... /walk.html
https://docs.oracle.com/javase... eAttr.html
0
0 / 0 / 0
Регистрация: 07.02.2010
Сообщений: 1,063
14.02.2017, 09:08
Цитата Сообщение от Eugen
Добрый вечер.

Подскажите пожалуйста, столкнулся со следующей дилеммой:
Есть сетевая шара с файлами. Перебираю их через CreateObject({Scripting.FileSystemObject }). Нужно отсеять системные файлы...
GetFileAttr, FileSystemObject.Attributes, да и GetFileAttributes(как в примере с kernel32) возвращают сумму констант, отвечающих за разные атрибуты. Т.е. в моем случае, у системного файла помимо признака System(4) стоит еще атрибут Archive(32). Как итог, запрашивая атрибуты всеми способами получаю цифру 36. Печаль в том, что все файлы в этой директории имеют архивный атрибут. Как в таком случае однозначно идентифицировать системный файл?
Битовый AND, не?
If (attrib AND 4) = 4 Then....
0
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 185
14.02.2017, 10:02
Цитата Сообщение от lmike
что есть системный файл?
thumbs.db


--- Добавлено 15 фев 2017. Первое сообщение размещено 15 фев 2017 ---




Цитата Сообщение от Мыш
Битовый AND, не?
If (attrib AND 4) = 4 Then....
Вроде сработало, но не понимаю, как это работает.
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
14.02.2017, 10:02
Цитата Сообщение от Eugen
thumbs.db


--- Добавлено 15 фев 2017. Первое сообщение размещено 15 фев 2017 ---


Вроде сработало, но не понимаю, как это работает.
битовая операция
а не проще фильтровать имена?
0
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 185
14.02.2017, 11:14
Фильтровать имена? Хмм... то есть просто отсеивать этот thumbs.db? А если еще какой "огрызок" появится? Это же вроде винда его создает для хранения эскизов мультимедиа. Сейчас у меня там только pdf, потом могут быть еще txt, csv, а может и просто изображения появятся...
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
14.02.2017, 11:43
Цитата Сообщение от Eugen
Фильтровать имена? Хмм... то есть просто отсеивать этот thumbs.db? А если еще какой "огрызок" появится? Это же вроде винда его создает для хранения эскизов мультимедиа. Сейчас у меня там только pdf, потом могут быть еще txt, csv, а может и просто изображения появятся...
дык и фильтровать - чтонадо
0
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 185
14.02.2017, 12:46
Цитата Сообщение от lmike
дык и фильтровать - чтонадо
и каждый раз при добавлении нового типа файлов что-то "докручивать"?
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
14.02.2017, 13:26
Цитата Сообщение от Eugen
добавлении нового типа файлов
уже эта фраза содержит ответ ;)
т.е. этот "раз" произойдет и сделать процедуру "расширения" скрипта не составит труда
файл приложили (с нек. типом) на сохранение - добавим фильтр
какие сложности?
0
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 185
14.02.2017, 14:28
Мне больше нравится идея отсеять ненужное) Пользователи туда ничего не выкладывают - все файлы выгружаются системой, т.е. туда уже ничего лишнего не попадет, кроме системных файлов.

В любом случае, спасибо за помощь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.02.2017, 14:28
Помогаю со студенческими работами здесь

RecordSource - как перебрать все???
Нужно что бы в таблицу выводилось все содержимое базы - как получать имена RecordSource и перебрать все имеющиеся в подключенной базе? ...

Как перебрать все пункты меню ?
т.е. если заранее не известно сколько MenuItems содержится в MainMenu..

Как перебрать все N-значные числа?
нам дают размер массива и надо перебрать все числа, т.е. дают 4: 0000 0001 0002 . . . . 0010

Как перебрать все таблицы в базе
Подскажите как правильно сделать. Необходимо загрузить данные в одну таблицу сначала с одного сервера, потом с другого за определенный...

Как перебрать все возможные числа?
Люди помогите как перебрать все возможные числа из заданных цифр например: 6 5 4 2 0, 6 4 5 2 0, 5 4 6 2 0.. и так далее все возможные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru