2009-04-08 1 views
2

Я хотел бы знать, если есть некоторые в построенных функциях для сценария, который описан ниже:любой функция для включения всех файлов определенного типа в папке в VB6

Входа является путем родительская папка. Ват, который должен выполнять функция, должен содержать все файлы .zip внутри этой родительской папки. Родительская папка может содержать любое количество подпапок, и то же самое относится и к подпапкам. Может ли кто-нибудь помочь мне с этим?

Версия VB не является баррикадой. Любые версии VB6 или VS2005 могут делать. Pls помогает мне. Также есть другой альтернативный способ, если нет встроенных функций как таковых. Заранее спасибо.

ответ

7

Для VB6.0 я бы использовать FileSystemObject и небольшой рекурсивной функции.

Sub test() 
    Dim fso As New Scripting.FileSystemObject 
    Dim files As New Collection 
    Dim file As Scripting.file 

    GetFilesRecursive fso.GetFolder("C:\YourFolder"), "zip", files, fso 

    For Each file In files 
    Debug.Print file.Name 
    Next file 
End Sub 

Sub GetFilesRecursive(f As Scripting.Folder, filter As String, c As Collection, fso As Scripting.FileSystemObject) 
    Dim sf As Scripting.Folder 
    Dim file As Scripting.file 

    For Each file In f.Files 
    If InStr(1, fso.GetExtensionName(file.Name), filter, vbTextCompare) = 1 Then 
     c.Add file, file.path 
    End If 
    Next file 

    For Each sf In f.SubFolders 
    GetFilesRecursive sf, filter, c, fso 
    Next sf 
End Sub 

Это не будет молниеносно. Максимальная производительность может быть достигнута только при использовании функций Win32 API, таких как FindFirstFile и FindNextFile.

4

Используя VB.NET, вы можете сделать это с помощью System.IO.Directory.GetFiles. Существует версия, которая принимает шаблон для поиска и позволяет вам искать подкаталоги.

For Each dir In Directory.GetFiles("path","*.zip",SearchOptions.AllDirectories) 
    Console.WriteLine(_ 
     "{0,-25} {1,25}", dir.FullName, dir.LastWriteTime) 
Next dir 
1

В VB6 вы хотите использовать FileSystemObject для выполнения сценария выполнения сценариев Microsoft. Вы можете получить доступ к сценарию выполнения скриптов, установив ссылку на него.

Каркас .NET имеет аналогичную, но более способный набор файлов/каталогов объекта обработки в пространстве имен System.IO

Ниже пример того, как использовать FileSystemObject в VB6.

Dim FSO As FileSystemObject 
Dim Folder As Folder 
Dim SubFolder As Folder 
Dim File As File 

Set FSO = New FileSystemObject 

Set Folder = FSO.GetFolder("C:\") 
For Each File In Folder.Files 
    Debug.Print File.Name 
Next File 

For Each SubFolder In Folder.SubFolders 
    Debug.Print SubFolder.Name 
Next SubFolder 

Set Folder = Nothing 
Set SubFolder = Nothing 
Set FSO = Nothing 
1

VB6 не имеет ничего, что сделает это одним щелчком мыши, но получить список всех ZIP-файлов можно, например, просто.

FSO не рекомендуется по нескольким причинам: один, он добавляет зависимость и два, это зависит от сценариев, которые могут быть отключены для каждой политики.

Во всяком случае, вот голый минимум пример вы можете конкретизации:

Dim Fils() As String 
Dim Counter As Long 
Dim CurrentFile As String 

Redim Fils(0 To 999) As String 

CurrentFile = Dir$(yourpath & "*.zip") 

Do While LenB(CurrentFile) 
    Fils(Counter) = CurrentFile 
    Counter = Counter + 1 
    CurrentFile = Dir$() 
Loop 

Конечно, вы хотите добавить проверку предела, и т.д., и Redim по мере необходимости, но это основная идея.

1

Еще один удар в нем:

Private Sub EnumSubfiles(ByVal ParentFolder As String, _ 
         ByVal FilePattern As String) 
    'Report back via Report subroutine. 
    Dim SubFolders As Collection 
    Dim Name As String 
    Dim FQName As String 
    Dim SubFolder As Variant 

    Set SubFolders = New Collection 
    Name = Dir$(ParentFolder & "\*", vbNormal Or vbDirectory) 
    Do Until Len(Name) = 0 
     FQName = ParentFolder & "\" & Name 
     If (GetAttr(FQName) And vbDirectory) = vbDirectory Then 
      If Not (Name = "." Or Name = "..") Then 
       SubFolders.Add FQName 
      End If 
     Else 
      If Name Like FilePattern Then Report FQName 
     End If 
     Name = Dir$() 
    Loop 
    For Each SubFolder In SubFolders 
     EnumSubfiles SubFolder, FilePattern 
    Next 
End Sub 
1

Просто падение-в CDirDrill class, что делает все это для вас, в полном родном VB6. Еще одно отличное решение от Karl Peterson :)

BTW Я также рекомендую избегать FileSystemObject. У меня были ошибки, потому что некоторые клиенты сумели заглушить scrrun.dll на своем ПК. Устраните зависимости, если они вам действительно не помогают.

 Смежные вопросы

  • Нет связанных вопросов^_^