Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Listowanie zawartości wybranego katalogu
hicks
raptor user



Typ: moderator
Postów: 279
Zarejestrowany: Apr 2003
Listowanie zawartości wybranego katalogu

W jaki sposób wylistować wszystkie pliki i katalogi znajdujące się w jakimś katalogu? Np. Mam katalog c:\ i chcę wylistować wszystkie pliki i katalogi, które się w nim znajdują i np. dodać do ListBoxa.

Czyli jak mam:
c:\katalog1\
c:\katalog2\
c:\plik1.hmm
c:\plik2.hmm

to chciałbym, aby w ListBoxie znalazło się:

katalog1 <DIR>
katalog2 <DIR>
plik1
plik2

Mam nadzieję, że zostałem zrozumiany


_____________________________________________
TLHW Clan member

06-07-2004 20:11
Pokaż profil hicks  Wyślij email do hicks   Odwiedź stronę hicks       2511367
bisiek




Typ: neutral
Postów: 487
Zarejestrowany: Jul 2003

Np. tak:

Dim a As String
Dim path As String
path = "C:"
a = Dir(path, vbArchive + vbHidden + vbReadOnly + vbSystem + vbDirectory)
Do
a = Dir
If a = "" Then Exit Do
If a <> ".." Then
If (GetAttr(path & a) And vbDirectory) > 0 Then List1.AddItem path & a & "    <DIR>" Else List1.AddItem path & a

End If
Loop

Jeżeli chcesz najpierw katalogi, a potem pliki to wpisz:

Dim a As String
Dim path As String
path = "C:\"
a = Dir(path, vbArchive + vbHidden + vbReadOnly + vbSystem + vbDirectory)
Do
a = Dir
If a = "" Then Exit Do
If a <> ".." Then
If (GetAttr(path & a) And vbDirectory) > 0 Then List1.AddItem path & a & "    <DIR>"

End If
Loop

'Nie ma wpisu vbDirectory
a = Dir(path, vbArchive + vbHidden + vbReadOnly + vbSystem)
Do
a = Dir
If a = "" Then Exit Do
If a <> ".." Then
List1.AddItem path & a

End If
Loop

Więcej o Dir VB i zawartość dysku

[Post edytowany dnia 06-07-2004 20:32 przez bisiek]


_____________________________________________
www.mob.abc.pl - moja strona o VB

06-07-2004 20:28
Pokaż profil bisiek  Wyślij email do bisiek   Odwiedź stronę bisiek       3380672
hicks
raptor user



Typ: moderator
Postów: 279
Zarejestrowany: Apr 2003

Wywala błąd jak dojdzie do pliku stronicowania... (pagefile.sys) w linijce
If (GetAttr(path & a) And vbDirectory) > 0 Then List1.AddItem path & a & "    <DIR>"
jak dam przed kodem On Error Resume Next to działa, ale pagefile.sys wykrywa jako katalog... :/

[Post edytowany dnia 06-07-2004 20:36 przez hicks]


_____________________________________________
TLHW Clan member

06-07-2004 20:35
Pokaż profil hicks  Wyślij email do hicks   Odwiedź stronę hicks       2511367
bisiek




Typ: neutral
Postów: 487
Zarejestrowany: Jul 2003

W 98 nie ma żadnych problemów, ale w win XP jest błąd. Plik jest zablokowany przez system, ale dziwne że nie można nawet sprawdzić atrybutów :/


_____________________________________________
www.mob.abc.pl - moja strona o VB

06-07-2004 20:52
Pokaż profil bisiek  Wyślij email do bisiek   Odwiedź stronę bisiek       3380672
bisiek




Typ: neutral
Postów: 487
Zarejestrowany: Jul 2003

Działa jeżli użyjwam api do odczytu atrybutów

'Deklaracja:
Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long

'Wczytywanie plików
Dim a As String
Dim path As String
path = "E:\"
a = Dir(path, vbArchive + vbHidden + vbReadOnly + vbSystem + vbDirectory)
Do
a = Dir
If a = "" Then Exit Do
If a <> ".." Then
attr = GetFileAttributes(path & a)
If (attr And vbDirectory) > 0 Then List1.AddItem path & a & "    <DIR>"

End If
Loop

'Nie ma wpisu vbDirectory
a = Dir(path, vbArchive + vbHidden + vbReadOnly + vbSystem)
Do
a = Dir
If a = "" Then Exit Do
If a <> ".." Then
List1.AddItem path & a

End If
Loop


_____________________________________________
www.mob.abc.pl - moja strona o VB

06-07-2004 20:58
Pokaż profil bisiek  Wyślij email do bisiek   Odwiedź stronę bisiek       3380672
hicks
raptor user



Typ: moderator
Postów: 279
Zarejestrowany: Apr 2003

Naprawde wielkie dzięki (działa)

[Post edytowany dnia 06-07-2004 21:01 przez hicks]


_____________________________________________
TLHW Clan member

06-07-2004 21:01
Pokaż profil hicks  Wyślij email do hicks   Odwiedź stronę hicks       2511367
karolinavb




Typ: neutral
Postów: 468
Zarejestrowany: Jan 2003

Procedura przedstawiona prze Biśka (jak masz na imię, jeśli wolno wiedzieć ?) działa w wersji przedstawionej poniżej na podstawie opracowania Micrososfta:

wywołanie np.
Private Sub cmdListFiles_Click()

Dim SearchStr As String

Dim FileCount As Integer

Dim DirCount As Integer

Call FindFiles("C:\Moje dokumenty", SearchStr, FileCount, DirCount)

MsgBox ("SearchStr: " & SearchStr _

        & vbCrLf & "FileCount: " & FileCount _

        & vbCrLf & " DirCount:" & DirCount)

End Sub



Function FindFiles(ByVal path As String, ByRef SearchStr As String, _
      Optional ByRef FileCount As Integer = 0, Optional ByRef DirCount As Integer = 0)
Dim FileName As String
Dim DirName As String    ' nazwa podkatalogu
Dim dirNames() As String ' bufor
Dim nDir As Integer
Dim i As Integer

On Error GoTo sysFileERR
If Right(path, 1) <> "\" Then path = path & "\"
' szukaj podkatalogów
nDir = 0
ReDim dirNames(nDir)
DirName = Dir(path, vbDirectory Or vbHidden Or vbArchive Or vbReadOnly Or vbSystem)  '
Do While Len(DirName) > 0
  If (DirName <> "." And (DirName <> ".." Then
      ' sprawdz czy to jest  katalog (bitwise)
      If GetAttr(path & DirName) And vbDirectory Then
        dirNames(nDir) = DirName
        DirCount = DirCount + 1
        nDir = nDir + 1
        ReDim Preserve dirNames(nDir)
      End If                          ' katalogi
sysFileERRCont:
  End If
  DirName = Dir()  ' Get next subdirectory.
Loop

''''  sumuj file sizes np .
FileName = Dir(path & SearchStr, vbNormal Or vbHidden Or vbSystem _
Or vbReadOnly Or vbArchive)
While Len(FileName) <> 0
  FindFiles = FindFiles + FileLen(path & FileName)
  FileCount = FileCount + 1
  '''' dodaj do listbox np
  ''''lstFile.AddItem path & FileName & vbTab & _
      FileDateTime(path & FileName)  ' data modyfikacji
  FileName = Dir()  ' następny plik.
Wend
' jesli sa podkatalogi
If nDir > 0 Then
  ' do nich
  For i = 0 To nDir - 1
    FindFiles = FindFiles + FindFiles(path & dirNames(i) & "\", _
      SearchStr, FileCount, DirCount)
  Next i
End If

AbortFunction:
      Exit Function
sysFileERR:
      If Right(DirName, 4) = ".sys" Then
        Resume sysFileERRCont ' np pagefile.sys
      Else
        MsgBox "Error: " & Err.Number & " - " & Err.Description, , _
        "Unexpected Error"
        Resume AbortFunction
      End If
End Function


_____________________________________________
Karolina

11-07-2004 22:22
Pokaż profil karolinavb  Wyślij email do karolinavb   
Wszystkich odpowiedzi: 6 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1