Тема: Как получить "Список файлов в директории"?

Как получить Список файлов в директории (поддиректорий)

Re: Как получить "Список файлов в директории"?

Вот помучай:

Sub Example_Dir()
Dim MyFile, MyPath, MyName
MyPath = "c:\"    ' Set the path.
MyName = Dir(MyPath, vbNormal)    ' Retrieve the first entry.
Do While MyName <> ""    ' Start the loop.
    ' Ignore the current directory and the encompassing directory.
    If MyName <> "." And MyName <> ".." Then
        MsgBox (MyName)
    End If
    MyName = Dir    ' Get next entry.
Loop
End Sub

Re: Как получить "Список файлов в директории"?

> Lenich
СПАСИБО уважаемый. А в поддиректориях как посчитать файлы

Re: Как получить "Список файлов в директории"?

А в поддиректориях как посчитать файлы

Re: Как получить "Список файлов в директории"?

Вот сварганил побыстрому (только испольузет стек, поэтому НЕРЕКОМЕНДУЕТЬСЯ считать файлы в директории, где их больше 2000):

Public files_Count As Integer
Public Count_Dir
Sub Example_Dir()
Dim MyPath
files_Count = 0
Count_Dir = 0
MyPath = "C:\Мои документы\Объекты\"    ' Указать путь.
list_Dir (MyPath) 'вызываем подсчет кол-во директорий
files_Count = files_Count + Count_File(MyPath) ' добавляем кол-во файлов из указанного пути
MsgBox "Files: " & files_Count & "  Directories: " & Count_Dir
End Sub
Public Function list_Dir(path_Dir As Variant)
Dim MyName2
MyName2 = Dir(path_Dir, vbDirectory)
Do While MyName2 <> ""
    'Отсекаем директроии "." и ".."
    If MyName2 <> "." And MyName2 <> ".." And MyName2 <> "*.*" Then
    'если это директория а не файл идем в неё
        If (GetAttr(path_Dir & MyName2) And vbDirectory) = vbDirectory Then
           ' MsgBox (path_Dir & MyName2)    'можно выводить названия каждой директории
            Count_Dir = Count_Dir + 1 'подстчет кол-во директорий
            'MsgBox "This direct contain " & Count_File(path_Dir & MyName2 & "\") & " files"
            files_Count = files_Count + Count_File(path_Dir & MyName2 & "\") ' подсчет кол-во файлов
            list_Dir = list_Dir(path_Dir & MyName2 & "\") ' рекурися функции для подсчета поддиректорий.
        End If
    End If
    ' из-за рекурсии, приходиться каждый раз возвращаться к текущей папке
    MyName3 = MyName2
    MyName2 = Dir(path_Dir, vbDirectory)
    Do While MyName2 <> MyName3
    MyName2 = Dir
    Loop
    MyName2 = Dir
    Loop
End Function
Function Count_File(pathDir As Variant) As Integer
Dim MyName1
Dim count As Integer
count = 0
MyName1 = Dir(pathDir, vbNormal)    ' Retrieve the first entry.
Do While MyName1 <> ""    ' Start the loop.
    count = count + 1
MyName1 = Dir    ' Get next entry.
Loop
Count_File = count
End Function

Прога не считает скрытые файлы. Проверить работу проги можно с помощью тогоже проводника.

Re: Как получить "Список файлов в директории"?

Lenich.
Круто! Спасибо. Теперь постораюсь добить эту задачу под свои нужны. (надеюсь чегонибудь выйдет у меня) А нужно.
В указанной папке например с:\proj (и подпапках) открывать файлы DWG и во всех layout выполнять команду explode (или еще какую нибудь). и файлы сохранять.

Re: Как получить "Список файлов в директории"?

Ок.
Вместо files_Count = files_Count + Count_File(path_Dir & MyName2 & "\") этой строки пиши вызов своей функции которая будет открывать чертеж, перебирать лайауты и выполнять твою команду, затем делать закрытие с сохранением.
Если что спрашивай.

Re: Как получить "Список файлов в директории"?

files_Count = files_Count + Count_File(path_Dir & MyName2 & "\")
Сейчас анализируются (подсчитываются все файлы). Соответствеено нужно только *.DWG и директории.
MyPath = "C:\Мои документы\Объекты\*.dwg"
правильно?
Сначало открыть файл DWG, сделать с ним все что надо, потом сохранить.

Re: Как получить "Список файлов в директории"?

Вместо подсчета файлов вызов функции: Your_Func (path_Dir & MyName2 & "\*.dwg")
И в ней (в функции) вместо "count = count + 1" записал бы операции над текущим файлом.