powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как узнать имя файлов
8 сообщений из 8, страница 1 из 1
Как узнать имя файлов
    #38927685
Как зная путь хранения папки, узнать кол-во файлов определенного расширения хранящихся в ней, а также имя этих файлов
...
Рейтинг: 0 / 0
Как узнать имя файлов
    #38927689
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
функция Dir
...
Рейтинг: 0 / 0
Как узнать имя файлов
    #38928397
Shocker.Pro,

Нашел вот такой пример, но почему то у меня не работает

Код: vbnet
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.
37.
38.
Function FilenamesCollection(ByVal FolderPath As String, Optional ByVal Mask As String = "", _
                              Optional ByVal SearchDeep As Long = 999) As Collection
     ' Получает в качестве параметра путь к папке FolderPath,
    ' маску имени искомых файлов Mask (будут отобраны только файлы с такой маской/расширением)
    ' и глубину поиска SearchDeep в подпапках (если SearchDeep=1, то подпапки не просматриваются).
    ' Возвращает коллекцию, содержащую полные пути найденных файлов
    ' (применяется рекурсивный вызов процедуры GetAllFileNamesUsingFSO)

     Set FilenamesCollection = New Collection    ' создаём пустую коллекцию
    Set FSO = CreateObject("Scripting.FileSystemObject")    ' создаём экземпляр FileSystemObject
    GetAllFileNamesUsingFSO FolderPath, Mask, FSO, FilenamesCollection, SearchDeep ' поиск
    Set FSO = Nothing: Application.StatusBar = False    ' очистка строки состояния Excel
End Function

Function GetAllFileNamesUsingFSO(ByVal FolderPath As String, ByVal Mask As String, ByRef FSO, _
                                  ByRef FileNamesColl As Collection, ByVal SearchDeep As Long)
     ' перебирает все файлы и подпапки в папке FolderPath, используя объект FSO
    ' перебор папок осуществляется в том случае, если SearchDeep > 1
    ' добавляет пути найденных файлов в коллекцию FileNamesColl
    On Error Resume Next: Set curfold = FSO.GetFolder(FolderPath)
     If Not curfold Is Nothing Then    ' если удалось получить доступ к папке

         ' раскомментируйте эту строку для вывода пути к просматриваемой
        ' в текущий момент папке в строку состояния Excel
        ' Application.StatusBar = "Поиск в папке: " & FolderPath

         For Each fil In curfold.Files    ' перебираем все файлы в папке FolderPath
            If fil.Name Like "*" & Mask Then FileNamesColl.Add fil.Path
         Next
         SearchDeep = SearchDeep - 1    ' уменьшаем глубину поиска в подпапках
        If SearchDeep Then    ' если надо искать глубже
            For Each sfol In curfold.SubFolders    ' перебираем все подпапки в папке FolderPath
                GetAllFileNamesUsingFSO sfol.Path, Mask, FSO, FileNamesColl, SearchDeep
             Next
         End If
         Set fil = Nothing: Set curfold = Nothing    ' очищаем переменные
    End If
End Function




Код: vbnet
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.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
' Пример использования функции в макросе:

Sub ОбработкаФайловИзПапки()
     On Error Resume Next
     Dim folder$, coll As Collection

     folder$ = ThisWorkbook.Path & "\Платежи\"
     If Dir(folder$, vbDirectory) = "" Then
         MsgBox "Не найдена папка «" & folder$ & "»", vbCritical, "Нет папки ПЛАТЕЖИ"
         Exit Sub        ' выход, если папка не найдена
    End If

     Set coll = FilenamesCollection(folder$, "*.xls")        ' получаем список файлов XLS из папки
    If coll.Count = 0 Then
         MsgBox "В папке «" & Split(folder$, "\")(UBound(Split(folder$, "\")) - 1) & "» нет ни одного подходящего файла!", _
                vbCritical, "Файлы для обработки не найдены"
         Exit Sub        ' выход, если нет файлов
    End If

     ' перебираем все найденные файлы
    For Each file In coll
         Debug.Print file        ' выводим имя файла в окно Immediate
    Next
End Sub

 Этот код позволяет осуществить поиск нужных файлов в выбранной папке (включая подпапки), и выводит полученный список файлов на лист книги Excel:

Sub ПримерИспользованияФункции_FilenamesCollection()
     ' Ищем на рабочем столе все файлы TXT, и выводим на лист список их имён.
    ' Просматриваются папки с глубиной вложения не более трёх.

     Dim coll As Collection, ПутьКПапке As String
     ' получаем путь к папке РАБОЧИЙ СТОЛ
    ПутьКПапке = CreateObject("WScript.Shell").SpecialFolders("Desktop")
     ' считываем в колекцию coll нужные имена файлов
    Set coll = FilenamesCollection(ПутьКПапке, ".txt", 3)

     Application.ScreenUpdating = False    ' отключаем обновление экрана
    ' создаём новую книгу
    Dim sh As Worksheet: Set sh = Workbooks.Add.Worksheets(1)
     ' формируем заголовки таблицы
    With sh.Range("a1").Resize(, 3)
         .Value = Array("№", "Имя файла", "Полный путь")
         .Font.Bold = True: .Interior.ColorIndex = 17
     End With

     ' выводим результаты на лист
    For i = 1 To coll.Count ' перебираем все элементы коллекции, содержащей пути к файлам
        sh.Range("a" & sh.Rows.Count).End(xlUp).Offset(1).Resize(, 3).Value = _
         Array(i, Dir(coll(i)), coll(i))    ' выводим на лист очередную строку
        DoEvents    ' временно передаём управление ОС
    Next
     sh.Range("a:c").EntireColumn.AutoFit    ' автоподбор ширины столбцов
    [a2].Activate: ActiveWindow.FreezePanes = True ' закрепляем первую строку листа
End Sub
...
Рейтинг: 0 / 0
Как узнать имя файлов
    #38928400
Shocker.Pro,

Подскажите как сделать чтобы
Textbox1 = кол-во файлов в выбранной папке
Textbox2 = имя первого файла
Textbox3 = имя второго файла
и.т.д.
...
Рейтинг: 0 / 0
Как узнать имя файлов
    #38928405
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир197243Нашел вот такой пример, но почему то у меня не работает
Попробуйте ПЕРВОЙ строкой модуля сделать
Код: vbnet
1.
Option Explicit
...
Рейтинг: 0 / 0
Как узнать имя файлов
    #38928418
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир197243,

с помощью Dir можно получить искомое в пять-шесть строчек гораздо быстрее, чем искать какие-то громоздкие примеры и разбираться, как они работают.
...
Рейтинг: 0 / 0
Как узнать имя файлов
    #38928450
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир197243Подскажите как сделать чтобы
Textbox1 = кол-во файлов в выбранной папке
Textbox2 = имя первого файла
Textbox3 = имя второго файла
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Dim i As Integer, k As String
k = Dir("v:\*.xml")
Do Until k = ""
  i = i + 1
  Me.Controls("Textbox" + CStr(i + 1)).Text = k
  k = Dir
Loop
Me.Textbox1 = CStr(i)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как узнать имя файлов
    #39209154
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слегка подправленный пример из третьего поста. В таком виде он прекрасно работает.
Код: vbnet
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.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
Function FilenamesCollection(ByVal FolderPath As String, Optional ByVal Mask As String = "", _
                              Optional ByVal SearchDeep As Long = 999) As Collection
    ' Получает в качестве параметра путь к папке FolderPath,
    ' маску имени искомых файлов Mask (будут отобраны только файлы с такой маской/расширением)
    ' и глубину поиска SearchDeep в подпапках (если SearchDeep=1, то подпапки не просматриваются).
    ' Возвращает коллекцию, содержащую полные пути найденных файлов
    ' (применяется рекурсивный вызов процедуры GetAllFileNamesUsingFSO)
    
    Dim FSO As Object

    Set FilenamesCollection = New Collection    ' создаём пустую коллекцию
    Set FSO = CreateObject("Scripting.FileSystemObject")    ' создаём экземпляр FileSystemObject
    GetAllFileNamesUsingFSO FolderPath, Mask, FSO, FilenamesCollection, SearchDeep ' поиск
    Set FSO = Nothing    ' очистка строки состояния Excel
End Function

Function GetAllFileNamesUsingFSO(ByVal FolderPath As String, ByVal Mask As String, ByRef FSO, _
                                  ByRef FileNamesColl As Collection, ByVal SearchDeep As Long)
    ' перебирает все файлы и подпапки в папке FolderPath, используя объект FSO
    ' перебор папок осуществляется в том случае, если SearchDeep > 1
    ' добавляет пути найденных файлов в коллекцию FileNamesColl
     On Error Resume Next
     Dim curfold As Object
     Dim fil As Object
     Dim sfol
     
     Set curfold = FSO.GetFolder(FolderPath)
     If Not curfold Is Nothing Then    ' если удалось получить доступ к папке

        ' раскомментируйте эту строку для вывода пути к просматриваемой
        ' в текущий момент папке в строку состояния Excel
        ' Application.StatusBar = "Поиск в папке: " & FolderPath

         For Each fil In curfold.Files    ' перебираем все файлы в папке FolderPath
            If fil.Name Like "*" & Mask Then FileNamesColl.Add fil.Path
         Next
         SearchDeep = SearchDeep - 1    ' уменьшаем глубину поиска в подпапках
         If SearchDeep Then    ' если надо искать глубже
             For Each sfol In curfold.SubFolders    ' перебираем все подпапки в папке FolderPath
                GetAllFileNamesUsingFSO sfol.Path, Mask, FSO, FileNamesColl, SearchDeep
             Next
         End If
         Set fil = Nothing
         Set curfold = Nothing    ' очищаем переменные
    End If
End Function

Public Sub FileInFolder()
' Пример использования функции
    On Error GoTo FileInFolder_Error
    
     Dim folder$, coll As Collection, File

     folder$ = "\\I-server-one\shara\ОНС_модуль_загрузка\"
     If Dir(folder$, vbDirectory) = "" Then
         MsgBox "Не найдена папка «" & folder$ & "»", vbCritical, "Нет папки"
         Exit Sub        ' выход, если папка не найдена
    End If

    Set coll = FilenamesCollection(folder$) ' можно и так (folder$, "*.xls") - получаем список файлов XLS из папки
    If coll.Count = 0 Then
         MsgBox "В папке «" & Split(folder$, "\")(UBound(Split(folder$, "\")) - 1) & "» нет ни одного подходящего файла!", _
                vbCritical, "Файлы для обработки не найдены"
         Exit Sub        ' выход, если нет файлов
    End If

     ' перебираем все найденные файлы
    For Each File In coll
         Debug.Print File        ' выводим имя файла в окно Immediate
    Next

Exit_FileInFolder:

    On Error GoTo 0
    Exit Sub

FileInFolder_Error:

     MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure FileInFolder"
     Resume Exit_FileInFolder

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


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