Mehrere Dateien (bzw. nach Liste) von Server (FTP) runterladen.

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Vultrax.

    Mehrere Dateien (bzw. nach Liste) von Server (FTP) runterladen.

    Hallo

    Wie kann man statt nur eine Datei mehrere Dateien gleichzeitig oder nach Liste runterladen?
    Ich möchte mit mein Programm, aus einen FTP-Server Ordner alle Dateien die vorhanden sind runterladen.
    (Im Browser kann ich ohne Passwort meine Dateien vom Server runterladen weil sie öffentlich sind, genauso möchte ich es haben)


    Ich hoffe ihr könnt mir helfen :)
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Vultrax“ ()

    1.) Du musst immer einen neuen WebClient Deklaieren unddie Daten mit DownliadFileAsync aufrufen und in einem gemeinsamen DownloadFileCompleted eine Zählvariable immer um eines hochzählen. Ich bin mir nicht sicher ob man aus einem WebClient mehrmals DFA aufrufen kann.

    VB.NET-Quellcode

    1. Dim Downloaded As Integer = 0
    2. Dim wc1 As New WebClient
    3. AddHandler wc1.DownloadFileCompleted, AddressOf DFC
    4. wc1.DFA("...", "...")
    5. Dim wc2 ...
    6. Sub DFC(sender As Object, e As AsyncCompletedEventArgs)
    7. Downloaded += 1
    8. If Downloaded = DeineMaximalenDownloads Then
    9. 'Alle Downloads abgeschlossen.
    10. End if
    11. End Sub


    2.) Du fügst alle deine Daten einer List(Of Uri/String) hinzu und gehts diese dann mit For Each durch und darin lädst du die Daten runter.

    VB.NET-Quellcode

    1. Dim wc As New WebClient
    2. Dim Files As New List(Of DWNFiles) 'Files ist eine Structure, die weiter unten erstellt wird, um Die URL und den Namen der Datei am lokalen Speicherort bestimmt.
    3. Dim Path As String = "" 'Dein Downloadpfad
    4. Files.Add(New DWNFiles("Url", "Dateiname.ext"))
    5. For Each File In Files
    6. wc.DownloadFile(File.URL, IO.Path.Combine(Path, File.Local)) 'Hier kein Async
    7. MessageBox("Download von " & File.Name & " abgeschlossen.)
    8. Next
    9. Public Structure DWNFiles
    10. Public Property URL As Uri
    11. Public Property Local As String 'Nur der Dateiname !!!
    12. Public Sub New(U As Uri, F As String)
    13. Me.URL = U
    14. Me.Local = F
    15. End Sub
    16. End Structure
    Grüße,
    Lukas

    Fragen über Themen im Forum per Konversation werden gelöscht und die Absender blockiert...
    Ich möchte den Ort wo die Dateien runtergeladen oder um welche Dateien es sich handelt nicht fest im Programm einbeten sondern möchte, das der Benutzer den Ordner in dem sich die Dateien befinden frei wählen kann (Link soll in Textdatei gespeichert werden), dabei sollte es egal sein, welche Dateien es sind, wie sie heiße, Größe etc. er soll einfach alle aus dem Ordner runterladen.

    Die Dateien müssen auch nicht gleichzeitig runtergeladen werden, Ich würde es sogar bevorzugen, wenn die Dateien nach Reihenfolge runtergeladen werden.
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford

    Vultrax schrieb:

    nicht fest im Programm einbeten
    Entschuldige bitte, dass ich am 11. Januar dieses Jahres noch nicht gewusst habe, was Du heute hier gefragt hast. :D :D :D
    Also:
    Nimm meinen Code als Anhaltspunkt und mach da iwo einen SaveFileDialog auf und hole Dir den Dateinamen und das Zielverzeichnis. Das Multidownload sollte dann genau so funktionieren, wie in meinem Beispiel.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Nimm es mir nicht übel, aber das verstehe ich jetzt so ganz :huh:

    In mein Programm möchte ich keinen SaveFileDialog haben, in einer Textdatei soll ein Link sein, der zu einen FTP-Ordner führt und aus diesen Ordner soll alles runtergeladen ohne das bekannt ist welche Dateiendung die Dateien haben, welchen Namen sie tragen oder wie Groß sie sind etc.

    - Link in der Textdatei speichern.
    - Programm starten und runterladen.
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford

    Vultrax schrieb:

    aber das verstehe ich jetzt so ganz
    Sorry, da haben wir wohl aneinander vorbeigeredet. :D
    Nimm meinen Code zum Multi-Download und pack da Deine Sources und Destinations rein, mit For Each sollte das problemlos gehen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Vultrax schrieb:

    aber das verstehe ich jetzt so ganz
    Sorry, da haben wir wohl aneinander vorbeigeredet. :D
    Nimm meinen Code zum Multi-Download und pack da Deine Sources und Destinations rein, mit For Each sollte das problemlos gehen.

    Ein Problem gibt es noch, wenn man einen Link von dem Ordner z.B. über FileZilla in die Zwischenablage kopiert, sieht der ungefähr so aus:

    Quellcode

    1. ftp://Server_Adresse@Benutzername.bplaced.net/OrdnerPlusDateien


    Wenn ich diesen Beispielweise in die Textdatei schreibt, wird nach dem FTP-Benutzerdaten (Passwort, ID) gefragt, wenn ich aber mein FTP-Server über einen Webbrowser öffne und den Link einer Datei kopiere, sieht der so aus:

    Quellcode

    1. http://Benutzername.bplaced.net/OrdnerPlusDateien/filezilla.exe


    und bei diesen Link wird nach keinen Passwort gefragt, aber das ist html.
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford

    Vultrax schrieb:

    Ein Problem gibt es noch
    Tut mir leid, da hab ich momentan keinen Plan.
    Was ist, wenn Du explizit ein leeres Passwort vorgibst, als Parameter Password='' oder so?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Funktioniert leider nicht ..

    Ich habe mal im Seite Quelltext geschaut, und da wird alles irgendwie gleich angegeben:

    HTML-Quellcode

    1. <img src="/icons-sys/text.png" alt="[TXT]"> <a href="Changelog.txt">Changelog.txt</a> 2013-07-15 08:40 95
    2. <img src="/icons-sys/text.png" alt="[TXT]"> <a href="Chat.txt">Chat.txt</a> 2013-07-25 21:50 356
    3. <img src="/icons-sys/text.png" alt="[TXT]"> <a href="Download.txt">Download_String.txt.txt</a> 2013-07-25 23:55 84
    4. <img src="/icons-sys/text.png" alt="[TXT]"> <a href="Version.txt">current_version.txt</a> 2013-06-23 20:04 7



    Kann man nicht irgendwie auslesen und solange durchgehen bis es nicht mehr geht :huh:
    Also das man immer nach "href" die Datei runterlädt? (Wenn man z.B. Changelog.txt geht, wird die Datei runtergeladen)
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford