Download File Fehler

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Trade.

    Download File Fehler

    Hey, ich habe einen Fehler mit DownloadFile Event.

    Folgendes :

    Ich möchte eine DLL Laden von Extern unzwar ...

    VB.NET-Quellcode

    1. wc.DownloadFile(Globals.DLLink, Globals.DLLLocation)


    Fehler

    Ein Ausnahmefehler des Typs "System.Net.WebException" ist in Microsoft.VisualBasic.dll aufgetreten.

    Zusätzliche Informationen: Ein Teil des Pfades "C:\Users\Saphira\Documents\Visual Studio 2015\Projects\Projekt\Projekt\bin\Release\LINKZURDLLERSEZT.dll" konnte nicht gefunden werden.

    Laden tu ich mit :

    VB.NET-Quellcode

    1. Public DLLLocation As String = Path.Combine(System.IO.Path.GetTempPath & "\" & "Ordner" & "\" & Globals.ProcName & "\" & systemmain.GetName & ".dll")


    Hatte aber auch eine Alternative die nicht geht :

    VB.NET-Quellcode

    1. Public DLLLocation As String = Path.Combine(My.Computer.FileSystem.SpecialDirectories.Temp, ProcName() & ".dll")


    Link wird geladen von der Datei und alles Korrekt angezeigt !

    VB.NET-Quellcode

    1. Public Function CreateDirectory()
    2. Try
    3. If (Directory.Exists(System.IO.Path.GetTempPath & "\" & "Ordner" & "\" & Globals.ProcName)) Then
    4. Else
    5. Directory.CreateDirectory(System.IO.Path.GetTempPath & "\" & "Ordner" & "\" & Globals.ProcName)
    6. End If
    7. Catch E As Exception
    8. End Try
    9. End Function
    Hm. Stimmt denn der Pfad? Kopier ihn mal beim Windows Explorer in die Adressleiste ein. Und prüf mal auch den Dateinamen.
    An welcher Stelle rufst Du diese Funktion auf? Ist das tatsächlich so gewünscht, eine lokale Datei per DownloadFile runterzuladen?

    btw: Public DLLLocation As String = Path.Combine(System.IO.Path.GetTempPath & "\" & "Ordner" & "\" & Globals.ProcName & "\" & systemmain.GetName & ".dll") => Public DLLLocation As String = Path.Combine(System.IO.Path.GetTempPath, "Ordner", Globals.ProcName, systemmain.GetName & ".dll"), denn ansonsten kannst Du Dir das String.Combine sparen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ok. Hab mal testweise ein Projekt mit folgendem Code erstellt:

    VB.NET-Quellcode

    1. Dim WebClient As New WebClient
    2. WebClient.DownloadFile("C:\Users\Zed\Documents\Visual Studio 2017\Projects\WindowsApp1\WindowsApp1\bin\Debug\1.txt", "C:\Users\Zed\Desktop\1.txt")

    Dadurch wird aus meinem Debug-Verzeichnis die Datei auf meinen Desktop kopiert/runtergeladen.
    Läuft.
    Dann basteln wir mal weiter. Nur so zum Spaß:

    VB.NET-Quellcode

    1. Dim WebClient As New WebClient
    2. Dim Source As New IO.FileInfo("C:\Users\Zed\Documents\Visual Studio 2017\Projects\WindowsApp1\WindowsApp1\bin\Debug\1.txt") 'bitte passend ersetzen
    3. Dim Destination As New IO.FileInfo("C:\Users\Zed\Desktop\1.txt") 'bitte passend ersetzen
    4. If Not Source.Directory.Exists Then MessageBox.Show("Quellverzeichnis fehlt.") : Exit Sub
    5. If Not Source.Exists Then MessageBox.Show("Quelldatei fehlt.") : Exit Sub
    6. If Not Destination.Directory.Exists Then MessageBox.Show("Zielverzeichnis fehlt.") : Exit Sub
    7. WebClient.DownloadFile(Source.FullName, Destination.FullName)
    8. If Not Destination.Exists Then MessageBox.Show("Download hat wohl nicht geklappt.")

    An welcher Stelle scheitert es jetzt? Wenn Du erst kurz vor dem Download das Verzeichnis erstellt, würde ich in Erwägung ziehen, dass beim Download das Verzeichnis quasi noch nicht fertiggestellt wurde. Musst Du austesten.

    btw:
    Aus

    VB.NET-Quellcode

    1. If (Directory.Exists(System.IO.Path.GetTempPath & "\" & "Ordner" & "\" & Globals.ProcName)) Then
    2. Else
    3. Directory.CreateDirectory(System.IO.Path.GetTempPath & "\" & "Ordner" & "\" & Globals.ProcName)
    4. End If

    kannst Du auch

    VB.NET-Quellcode

    1. Directory.CreateDirectory(System.IO.Path.GetTempPath & "\" & "Ordner" & "\" & Globals.ProcName)
    machen, falls sonst in den Zeilen nix drinsteht. Das kommt auf's Gleiche raus. Der Umbau zu FileInfo und DirectoryInfo käme dann im Anschluss.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „VaporiZed“ ()

    Also erstmal solltest Du Option Strict On machen. Eine Funktion ohne Rückgabetyp gibt es nicht. Das ist wenn dann eine Sub. Dann sind öffentliche Felder ein NoGo. Mach da bitte eine statische Property draus. Dann lass den My-Namespace weg und nimm System.IO.

    Saphira104 schrieb:

    Path.Combine(System.IO.Path.GetTempPath & "\" & "Ordner" & "\" & Globals.ProcName & "\" & systemmain.GetName & ".dll")
    Du nutzt zwar Path.Combine, aber das macht gar keinen Sinn, wenn Du die Pfadteile trotzdem selber zusammenfügst. Hast Du denn Sinn von Path.Combine verstanden?

    Saphira104 schrieb:

    If (Directory.Exists(System.IO.Path.GetTempPath & "\" & "Ordner" & "\" & Globals.ProcName)) Then
    Else
    Directory.CreateDirectory(System.IO.Path.GetTempPath & "\" & "Ordner" & "\" & Globals.ProcName)
    End If
    Was wird das? Warum ist da ein leerer If-Teil? Dann invertiere doch gleich die Abfrage und mach da If Not.

    Dann hast Du da ein Try-Catch und verschluckst einfach alle Exceptions. Das ist so ein typischer Fehler, den man am Anfang macht. Der ist aber alles andere als gut: TryCatch ist ein heißes Eisen
    Exceptions sind etwas gutes und sollten passend behandelt werden.

    Ansonsten probiere mal VaporiZeds Vorschlag aus und berichte.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: