Moin,
habe Probleme mit der Darstellung des Root-VErzeichnisses in einem ListView-Steuerelement.
Folgende Vorgeschichte:
Ich entwickel für einen Kunden ein FTP-Programm für den innerbetrieblichen Austausch von Dateien, wobei der Kunde mehrere Standorte in Deutschland hat.
Deshalb auch das FTP-Programm.
In einer *.ini-Datei werden folgende Einträge gemacht.
ADMIN=0 oder 1 (wobei 1 ADMIN=True dartsellt)
Wenn er Admin ist, dann darf er Verzeichnisse anlegen, Löschen oder umbenennen.
Egal es funktioniert ja.
Jetzt wird die Anzahl der Oberverzeichnisse angezeigt.
ANZAHL=4
Und jetzt die eigendlichen (Ober)Verzeichnisse
1=asd2:1
2=asd2:0
3=asd3:0
4=asd4:1
Hier werden die voprhandenen Verzeichnisse genannt und mit 1 oder 0 gekennzeichnet, wobei die 1 aussagt, dass der Benutzer das Verzeichnis sehen darf.
Aber egal...es funktioniert und ist nur ZUsatzinformation für euch.
Jetzt zum eigendlichen Problem.
Ich logge mich auf meinem FTP-Server ein und im ListView-Steuerelement werden alle Verzeichnisse sichtbar, welche mit 1 (*.ini-Datei) gekennzeichnet wurden.
Soweit korrekt.
Jetzt gehe ich in ein Verzeichnis rein und im ListView-Steuerelement wird ein Pfeil nach oben gezeigt, welcher anzeigt, dass ich ein Verzeichnis höher gehen kann.
Soweit korrekt.
Wenn ich jetzt aber diesen Pfeil anklicke und nach oben gehe, dann befinde ich mich ja jetzt eigendlich im Root-Verzeichnis. Er zeigt mir jetzt aber immer noch den Pfeil nach oben an.
Ich komme einfach nicht auf die Lösung und habe euch mal nachfolgend einen Teil des Codes zusammengestellt.
Nachfolgend die Funktion, welche für das Auslesen der Verzeichnisse, Ordner und Dateien zuständig ist.
Private Sub FTP_InitList()
'----------------------------------------------------------------------------
' ---------
'PARAMETER : keine
'RETURNS : keine
'ERRORS : keine
'BESCHREIBUNG : - Auslesen aller Verzeichnisse, Ordner oder Dateien im
' entsprechen-
' den Pfad
'----------------------------------------------------------------------------
' ---------
Dim nCount As Long
Dim i As Long
Dim sFolders() As String
Dim sFiles() As String
Dim nResult As Long
Dim strGesamt As String
Dim strEndung As String
Dim intOrdner As Integer
Dim intDateien As Integer
'Fehlerbehandlungsroutine
On Error GoTo ErrorHandler
gintOrdner = 0
gintDateien = 0
Screen.MousePointer = vbHourglass
With ListView1.ListItems
.Clear
' Befinden wir uns im ROOT-Verzeichnis?
'Wenn JA, dann...
If (VBEX_FTPCurDir(hSocket) = "/") Then
'Aufruf Funktion aus Modul modDOVerwaltung
'***INFO: War vorher auf True gesetzt!!!
Call fktReadFolder(True)
'Aufruf Funktion aus Modul modDOVerwaltung
Call fktReadFile
Call FTP_VerzeichnisAnzeigen
Else
'Aufruf Funktion aus Modul modDOVerwaltung
'***INFO: War vorher auf False gesetzt!!!
Call fktReadFolder(False)
'Aufruf Funktion aus Modul modDOVerwaltung
Call fktReadFile
Call FTP_VerzeichnisAnzeigen
End If
End With
Me.lblElementeZahl.Caption = ""
Me.lblElementeZahl.Caption = " Ordner: " & gintOrdner & " / " & _
"Dateien : " & gintDateien
Screen.MousePointer = vbNormal
Exit Sub
ErrorHandler:
MsgBox strError & " (Funktion: `FTP_InitList()´) "
End Sub
Private Sub FTP_VerzeichnisAnzeigen()
'----------------------------------------------------------------------------
' ---------
'PARAMETER : keine
'RETURNS : keine
'ERRORS : keine
'BESCHREIBUNG : - Auslesen aller Verzeichnisse, Ordner oder Dateien im
' entsprechen-
' den Pfad
'----------------------------------------------------------------------------
' ---------
'Fehlerbehandlungsroutine
On Error GoTo ErrorHandler
Me.lblPath.Caption = ""
' aktuellen Pfad in einem Label-Feld anzeigen
Me.lblPath.Caption = VBEX_FTPCurDir(hSocket)
Exit Sub
ErrorHandler:
MsgBox strError & " (Funktion: `FTP_VerzeichnisAnzeigen()´) "
End Sub Weitere Funktionen:
Public Function fktReadFolder(ByVal Root As Boolean)
'======================================================================
'
' Bezeichnung : fktReadFolder ()
' BESCHREIBUNG : - Auslesen aller Ordner auf dem FTP-Server aus dem
' Verzeichnis in dem man sich gerade befindet
'
' Datum TTMMJJ : 15.07.2002
' Entwickler : Brian Schwartz
'
'----------------------------------------------------------------------
'
' PARAMETER : Root as Boolean
' RUECKGABEWERT: True oder False
' Fehlerbehand.: keine vorhanden
' History : 15.07.2002 - Start Entwicklung
' 18.07.2002 - Aenderung der Funktion
'
'======================================================================
Dim nCount As Long
Dim i As Long
Dim j As Integer
Dim sFolders() As String
Dim nResult As Long
Dim strGesamt As String
Dim strEndung As String
Dim intOrdner As Integer
Dim intDateien As Integer
Dim intBerechtigung As Integer
Dim strVerzeichnis As String
Dim vParts As Variant
Dim intAnzahl As Integer
ReDim sFolders(5000)
intAnzahl = GetINISetting(gstrINIFileName, "Verzeichnisse", "Anzahl", "")
gintOrdner = 0
If Root = False Then
frmMain.ListView1.ListItems.Add , , " ..", , 3
End If
' zunächst Ordner ermitteln
nCount = VBEX_FTPFolderList(hSocket, sServer, sFolders())
If nCount >= 0 Then
If nCount > UBound(sFolders) Then nCount = UBound(sFolders)
For i = 0 To nCount
If Root Then
For j = 1 To intAnzahl
vParts = Split(arrVerzeichnisse(j), ":")
strVerzeichnis = vParts(0)
intBerechtigung = vParts(1)
If sFolders(i) = strVerzeichnis Then
If intBerechtigung = 1 Then
gintOrdner = gintOrdner + 1 'Anzahl Ordner für lblElemente
' ermitteln
frmMain.ListView1.ListItems.Add , , sFolders(i), , 1
End If
Exit For
End If
Next j
Else
gintOrdner = gintOrdner + 1 'Anzahl Ordner für lblElemente ermitteln
frmMain.ListView1.ListItems.Add , , sFolders(i), , 1
End If
Next i
End If
Erase sFolders
End Function
Public Function fktReadFile()
'======================================================================
'
' Bezeichnung : fktReadFile ()
' BESCHREIBUNG : Auslesen aller Dateien in dem Verzeichnis wo man sich
' gerade befindet
'
' Datum TMJ : 18.07.2002
' Entwickler : Brian Schwartz
'
'----------------------------------------------------------------------
'
' PARAMETER : keine vorhanden
' RUECKGABEWERT: keine vorhanden
' Fehlerbehand.: keine vorhanden
' History : 18.07.2002 - Start Entwicklung
'
'======================================================================
Dim nCount As Long
Dim i As Long
Dim sFiles() As String
Dim nResult As Long
Dim strGesamt As String
Dim strEndung As String
Dim intOrdner As Integer
Dim intDateien As Integer
ReDim sFiles(5000)
nCount = VBEX_FTPFileList(hSocket, sServer, sFiles())
If nCount >= 0 Then
If nCount > UBound(sFiles) Then nCount = UBound(sFiles)
gintDateien = nCount + 1 'Anzahl Dateien für lblElemente ermitteln
For i = 0 To nCount
strEndung = Right(sFiles(i), 4)
If strEndung = ".fis" Then
'wenn Endung = `.fis´, dann nix machen
gintDateien = gintDateien - 1
If gintDateien < 0 Then gintDateien = 0
Else
'ermitteln und anzeigen
frmMain.ListView1.ListItems.Add , , sFiles(i), , 2
End If
Next i
End If
Erase sFiles
End Function Hoffentlich kann mir jetzt noch jemand helfen, dann wäre ich glücklich.
Bei der Gelegenheit. Das Label mit dem Aktuellen Pfad in der Funktion FTP_VerzeichnisAnzeigen aktualisiert sich auch nicht. Gibt es da vielleicht auch einen Trick?
Vielen Dank für die Hilfe und Mühe...
Das Programm funktioniert so weit recht gut. Nur die kleinen Bugs machen mir Probleme.
Viele Grüsse sendet
Brian |