Problem beim auflisten von Datein eines FTP-Servers

  • VB.NET
  • .NET (FX) 4.0

Es gibt 41 Antworten in diesem Thema. Der letzte Beitrag () ist von Jason.

    Problem beim auflisten von Datein eines FTP-Servers

    Hallo.
    Ich habe ein Prblem beim auflisten von Dateien auf einem FTP Server.

    Dieser Code listet alle Ordner des Servers in die ServerFolderListBox auf:

    VB.NET-Quellcode

    1. ServerDownloadFoldersLB.Items.Clear()
    2. Dim request As FtpWebRequest =
    3. DirectCast(WebRequest.Create("ftp://gsfg-dataserver.bplaced.net/Dateiverzeichnis/"),
    4. FtpWebRequest)
    5. request.Method = WebRequestMethods.Ftp.ListDirectory
    6. request.Credentials = New NetworkCredential("Benutzername", "Passwort")
    7. Dim SR As New StreamReader(request.GetResponse().GetResponseStream())
    8. Do
    9. For Each Folder As String In SR.ReadLine
    10. ServerDownloadFoldersLB.Items.Add(SR.ReadLine)
    11. If SR.EndOfStream = True Then
    12. Exit Do
    13. End If
    14. Next
    15. Loop


    Die Dateien des in der ServerFolderListBox werden wiefolgt angezeigt:

    VB.NET-Quellcode

    1. ServerDownloadFilesLB.Items.Clear()
    2. Dim request As FtpWebRequest = DirectCast(WebRequest.Create("ftp://gsfg-dataserver.bplaced.net/Dateiverzeichnis/" & ServerDownloadFoldersLB.SelectedItem & "/"), FtpWebRequest)
    3. request.Method = WebRequestMethods.Ftp.ListDirectory
    4. request.Credentials = New NetworkCredential("Benutzername", "Passwort")
    5. Dim SR As New StreamReader(request.GetResponse().GetResponseStream())
    6. Do
    7. For Each Datei As String In SR.ReadLine
    8. ServerDownloadFilesLB.Items.Add(SR.ReadLine)
    9. If SR.EndOfStream = True Then
    10. Exit Do
    11. End If
    12. Next
    13. Loop


    Der Code soll die Dateien eines Ordners auflisten


    In der ServerFolderListBox werden die Ordnernamen aufgeleistet.
    Wenn ich mit der Maus einen Eintrag in der ServerFolderListBox auswähle, solln alle Dateien des ausgewählten Ordners in der ServerFilesListBox aufgelistet werden.

    Das Problem besteht darin, dass garnichts passiert.

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    guggemol FtpWebRequest-Tutorial - Da geht das.

    wenn bei dir garnix passiert - haste üprüft, ob der Code ühaupt ausgeführt wird?

    Oh je

    VB.NET-Quellcode

    1. For Each Folder As String In SR.ReadLine
    Das funktioniert in deinem Sinne?
    Weil in meiner Welt ist das ziemlicher Quark.
    Welchen DatenTyp gibt SR.ReadLine zurück?
    Ich habe das eingebaut: For Each Folder As String In SR.ReadLine

    Also, Ich habe zwei ListBoxen.
    In der linken ListBox (ServerDownloadFolderLB) werden die Ordner angezeigt, was auch ganz gut klappt.
    Und in der rechten ListBox (ServerDownloadFilesLB) sollen die Dateien des Ordners der in der linken ListBox markiert ist angezeigt werden.

    In dem SelectedIndexChanged Event von der linken ListBox (ServerDownloadFolderLB) wird der code in einem Sub aufgerufen:

    VB.NET-Quellcode

    1. Private Sub ListServerFilesLB()
    2. ServerDownloadFilesLB.Items.Clear()
    3. Dim request As FtpWebRequest = DirectCast(WebRequest.Create("ftp://gsfg-dataserver.bplaced.net/Dateiverzeichnis/" & ServerDownloadFoldersLB.SelectedItem & "/"), FtpWebRequest)
    4. request.Method = WebRequestMethods.Ftp.ListDirectory
    5. request.Credentials = New NetworkCredential("Benutzername", "Passwort")
    6. Dim SR As New StreamReader(request.GetResponse().GetResponseStream())
    7. Do
    8. For Each Datei As String In SR.ReadLine
    9. ServerDownloadFilesLB.Items.Add(SR.ReadLine)
    10. If SR.EndOfStream = True Then
    11. Exit Do
    12. End If
    13. Next
    14. Loop
    15. End Sub


    "ftp://gsfg-dataserver.bplaced.net/Dateiverzeichnis/" & ServerDownloadFoldersLB.SelectedItem & "/"

    Wenn ich das als MessageBox anzeigen lasse, bekomme ich einen Fehlerfreien Link: gsfg-dataserver.bplaced.net/Dateiverzeichnis/Ordner/

    Es passiert immer noch nichts, wenn ich einen Ordner in der linken Listbx auswähle.
    Bilder
    • Unbenannt.png

      2,86 kB, 457×534, 160 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Jason“ ()

    Fangen wir damit an das du Fragen beantwortest.
    1. EDR fragte dich ob diese Zeile For Each Datei As String In SR.ReadLinefür dich richtig erscheint und welche Datentypen du da bekommst?
    2. Bitte bleib bei einer Sprache wenns um die benennung deiner Variablen, Subs, usw. geht und nicht Denglisch. Wenn du das englische Wort für Datei nicht weißt nutze File ;)
    Wer fragt, ist ein Narr für eine Minute. Wer nicht fragt, ist ein Narr sein Leben lang.
    Tut mir leid, dass ich deine Frage nicht beantwortet habe. :S

    Mit dem StreamReader werden die Inhalte des Verzeichnisses ausgelesen

    Ich denke mal, dass mit SR.ReadLine die ausgelesenen Dateien einzelt in die ListBox geschrieben werden.

    VB.NET-Quellcode

    1. ServerDownloadFilesLB.Items.Add(SR.ReadLine)
    2. Dim SR As New StreamReader(request.GetResponse().GetResponseStream())


    Kann es sein, dass ich was falsch mache?
    Hmm - mir scheint, mit dir ist überhaupt keine Kommunikation möglich.
    Dir wird glaub 4 mal dieselbe Frage gestellt - du kannst sie gern nochmal nachlesen - Post#4.
    Aber jedesmal schwafelst du von was ganz anderem, also ob die genannte Zeile funktioniert in deinem Sinne weiß ich immer noch nicht.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    wenn bei dir garnix passiert - haste üprüft, ob der Code ühaupt ausgeführt wird?: Ja, der Code wird ausgeführt.
    und die andere Frage habe ich weiter oben ^ beantwortet.

    ---

    Ich habe mir mal den Link von @ErfinderDesRades angesehen.

    Ich habe den code umgeändert.

    VB.NET-Quellcode

    1. ServerDownloadFilesLB.Items.Clear()
    2. Dim url As String = "ftp://gsfg-dataserver.bplaced.net/Dateiverzeichnis/" & ServerDownloadFoldersLB.SelectedItem & "/"
    3. Dim request = WebRequest.Create(url)
    4. request.Credentials = New NetworkCredential("Beutzername", "Passwort")
    5. request.Method = WebRequestMethods.Ftp.ListDirectoryDetails
    6. Using resp = request.GetResponse(), sr = New StreamReader(resp.GetResponseStream)
    7. While Not sr.EndOfStream
    8. Dim line As String = sr.ReadLine
    9. ServerDownloadFilesLB.Items.Add(line)
    10. End While
    11. End Using


    Es werden aber keine Dateinamen aufgelistet, sondern das: drwxr-xr-x 2 330 330 2048 Jul 30 18:12 Datei01

    Wenn ich ListDirectoryDetails zu ListDirectory ändere, erscheint garnichts mehr in der LsitBox.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Jason“ ()

    naja - ich für mein Teil kanns nicht mehr mit ansehen.
    Also die Schleife in Post#1, zeilen #8-15 muss

    VB.NET-Quellcode

    1. Do
    2. Dim Datei = SR.ReadLine
    3. If Datei Is Nothing Then Exit Do
    4. ServerDownloadFilesLB.Items.Add(Datei)
    5. Loop
    Wenns immer noch nicht geht, sind halt noch weitere Fehler drinne.
    Mangels Kommunikation wirst du vmtl. nie herausfinden, was du da alles versemmelt hattest.

    Jason schrieb:

    Ich habe die Loopschleife eingebaut.
    Es wird in jedem ordner nur eine Datei anzegeigt.
    Ach - ich sehe grad, in post#12 erhälst du ja bereits brauchbare Ergebnisse. Das hat sich mit meim Post überschnitten.

    Andere Ergebnisse als diese komischen Zeilen wirst du nicht erhalten.
    Ich hab Anfangs ja auf ein Tut verlinkt - da werden u.a. diese Ergebnisse aufgeschlüsselt.

    ErfinderDesRades schrieb:

    Ich hab Anfangs ja auf ein Tut verlinkt - da werden u.a. diese Ergebnisse aufgeschlüsselt.


    Das Tutorial habe ich mir vorhin angesehen.
    Dadurch bin ich ja auch weitergekommen.
    Ich komme im Moment nicht weiter, weil in der FileListBox nur eine Datei aufgelistet wird.
    Mein Ziel ist es alle Dateien des Orders (der in der FolderListBox ausgewählt wurde) in die FileListBox anzuzeigen.