Fehler beim Download mehrerer Dateien

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Dragon_II.

    Fehler beim Download mehrerer Dateien

    Halli Hallo,

    ich habe hier im Forum ein Beitrag gefunden, der einen Multifile Download erklärt...


    Den habe ich so weit nachgebaut und umgebaut, wie ich Ihn brauche... nun habe ich aber ein Problem.... Und zwar bekomme ich einen Fehler:

    VB.NET-Quellcode

    1. If WebClient1.IsBusy = True Then ' wenn webclient1 schon am arbeiten ist dann
    2. ''''nichts machen
    3. Else ' Falls nicht
    4. sLine = oStream.ReadLine() 'Nächste Zeile der Textdatei lesen
    5. If IsNothing(sLine) Then MessageBox.Show("Keine weiteren Dateien zum Download verfügbar") ' Wenn die Zeile Leer ist dann Messagebox zur Info anzeigen
    6. Dim uri As New Uri(sLine) 'URL für den Webclient setzen mit dem Link aus der Zeile der Textdatei.
    7. Dim dateiname As String = IO.Path.GetFileName(sLine) 'Den dateinamen holen von der Datei die gedownloadet werden soll.
    8. Label1.Text = dateiname 'Dem Label "lblname" den Dateinamen als Text geben.
    9. WebClient1.DownloadFileAsync(uri, Path.GetDirectoryName(Application.ExecutablePath) & "/files/" & "" & dateiname) ' Den Download der Datei starten.
    10. End If
    11. Loop
    12. oStream.Close() 'wenn alles fertig lesen schließen
    13. End If


    und zwar in genau der Zeile:

    VB.NET-Quellcode

    1. Dim uri As New Uri(sLine) 'URL für den Webclient setzen mit dem Link aus der Zeile der Textdatei.


    Dort bekomme ich den Fehler, dass der Wert nicht NULL sein darf... Aber da steht definitiv was drin, also in der Zeile... Vielleicht könnt ihr mir helfen.

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

    friloo schrieb:

    Aber da steht definitiv was drin, also in der Zeile...

    Sicher? Meinst du wegen dieser Zeile hier:

    friloo schrieb:

    VB.NET-Quellcode

    1. If IsNothing(sLine) Then ...


    Machs lieber so:

    VB.NET-Quellcode

    1. If String.IsNullOrEmpty(sLine) Then ...
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.
    Hallo friloo

    wenn die Messagebox mit der Meldung Keine weiteren Dateien zum Download erscheint, dann wirst du eine Leerzeile in der update.txt haben.
    Hier wird dein Problem liegen. Es wird zwar in dem Fall eine Meldung ausgegeben aber dennoch versucht mit leerer Variable sLine die Klasse Uri zu Instanzieren.

    Es gibt dafür zwei Möglichkeiten.

    1. Kontrolliere das wirklich nur gültige Links in der Datei update.txt stehen. Es dürfen wiklich keine Leerzeilen vorhanden sein auch der letzte Link darf nicht mit Enter enden.

    2. Es wird im Source abgefangen z.B.

    VB.NET-Quellcode

    1. If WebClient1.IsBusy = True Then ' wenn webclient1 schon am arbeiten ist dann
    2. ''''nichts machen
    3. Else ' Falls nicht
    4. sLine = oStream.ReadLine() 'Nächste Zeile der Textdatei lesen
    5. If Not String.IsNullOrEmpty(sLine) AndAlso sLine.StartsWith("http://") Then ' Nur wenn was in der Zeile steht auch verarbeiten sonst überspringen. Sowie die Zeile mit http:// beginnen muß.
    6. Dim uri As New Uri(sLine) 'URL für den Webclient setzen mit dem Link aus der Zeile der Textdatei.
    7. Dim dateiname As String = IO.Path.GetFileName(sLine) 'Den dateinamen holen von der Datei die gedownloadet werden soll.
    8. Label1.Text = dateiname 'Dem Label "lblname" den Dateinamen als Text geben.
    9. WebClient1.DownloadFileAsync(uri, Path.GetDirectoryName(Application.ExecutablePath) & "/files/" & "" & dateiname) ' Den Download der Datei starten.
    10. End If
    11. End If
    12. Loop
    13. oStream.Close() 'wenn alles fertig lesen schließen
    14. End If


    Damit könnte man sogar Kommentare in die update.txt schreiben, weil nur die Zeilen die mit http:// anfangen auch verarbeitet werden.

    Ich hoffe das dir das weiter hilft.