.zip Datei wird nicht verschoben

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

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

    .zip Datei wird nicht verschoben

    Hallo, ich versuche in meinem Programm eine .zip datei verschoben.
    Leider sagt er mir immer:

    C#-Quellcode

    1. Ein Ausnahmefehler des Typs "System.IO.IOException" ist in mscorlib.dll aufgetreten.
    2. Zusätzliche Informationen: Eine Datei kann nicht erstellt werden, wenn sie bereits vorhanden ist.


    Was mach ich falsch?
    Meine Funktion:

    VB.NET-Quellcode

    1. tb1.Text = " "
    2. System.IO.Directory.CreateDirectory("C:\Program Files (x86)\" & tb2.Text)
    3. tb1.Text = "Directory Created: (''C:\Program Files (x86)\" & tb2.Text & "'')" & vbCrLf
    4. Dim destDirectory As String = "C:\Program Files (x86)\" & tb2.Text
    5. Dim sourcefile As String = My.Computer.FileSystem.SpecialDirectories.Desktop & "\IstDochEgal.zip"
    6. File.Move(sourcefile, destDirectory)
    Moin,

    1. pfusche nicht in C:\ rum, da hat nichts etwas zu suchen und Du riskierst Fehler wegen fehlenden Rechten.
    2. Nie absolute Pfade nutzen.
    3. ​Path.Combine nutzen.
    4. Nutze nicht den My-Namespace, der ist zu 90% Unsinn, nehme stattdessen hier z. B, ​Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
    5. Der Fehler besagt, dass der Ordner bereits existiert.

    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 :!:
    @Twometer:
    tb2.text ist ein Ordner der vom Benutzer erstellt wurde.
    Und da (also Programme(x86)\ + erstellter ordner) soll die Datei rein. Also nein. Die Datei ist da nicht drinnen.

    @Trade:
    Ich möchte aber gerne in Programme(x86) meine Datei haben! :>
    2. absolute Pfade :o?
    3. Ich mach mich schlau
    4. Alles klar.
    5. Er soll ja keinen Ordner erstellen sondern die Datei in den Ordner moven :o?

    Fachkraftx3 schrieb:

    Ich möchte aber gerne in Programme(x86) meine Datei haben! :>

    Nö, das ist alleine die Entscheidung des Nutzers, wo er was haben will, das ist sonst ungut.

    Fachkraftx3 schrieb:

    absolute Pfade :o?

    Ja, Du schreibst einfach hardcoded da "Program Files (x86)" rein (absoluter Pfad), was ist, wenn es den nicht gibt o. ä.?

    Dein Fehler kommt hier: System.IO.Directory.CreateDirectory("C:\Program Files (x86)\" & tb2.Text), nicht beim Verschieben. Das hättest Du auch gesehen, wenn Du mal den StackTrace gelesen hättest. ;)

    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 :!:
    Schau Dir mal die Parameter von ​Path.Combine an, am Anfang kommt immer Dein Pfad, z. B. Environment.GetFolderPath(Environment.SpecialFolder.Desktop), was z. B. als String dann "D:\Desktop" wäre und dann werden einfach bei den nächsten Parametern die Anhänge angegeben, z. B. "test" würde die Methode dann automatisch anhängen und beides mit einem Slash verbinden: "D:\Desktop\test". Und so kannst Du das beliebig machen.
    Auf MSDN gibt es auch Beispiele unten.

    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 :!:
    Mit ​File.Move, wie oben.

    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 :!:
    Ja, das gibt ja einen String zurück, probiere es halt aus, learning by doing. ;)

    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 :!:
    Genau, was ich gesagt habe. Das wird Dir nämlich auch passieren, wenn es den Pfad auf dem System nicht gibt und dann hast Du ein Problem. In dem Fall ist es nur ein Typo "Programm Files".

    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 :!:
    Dann existiert die Datei schon an der Stelle. Versuch mal die Fehlermeldungen etwas zu verstehen und evtl. selbst zu bearbeiten, nicht böse gemeint. ;)

    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 :!:
    @Trade:
    Ich würde ja gerne und das mach ich auch größten teils :D aber ich hab die DATEI da NICHT drinnen.
    Ich geb dir mal meine Komplette funktion

    VB.NET-Quellcode

    1. tb2.ReadOnly = True
    2. If tb2.Text = "Ordner Name" Then
    3. tb1.Text = tb1.Text & "Bitte geben Sie einen Ordner Namen ein." & vbCrLf
    4. Else
    5. If System.IO.Directory.Exists("C:\Program Files (x86)") Then
    6. tb1.Text = " "
    7. System.IO.Directory.CreateDirectory("C:\Program Files (x86)\" & tb2.Text)
    8. tb1.Text = "Directory Created: (''C:\Program Files (x86)\" & tb2.Text & "'')" & vbCrLf
    9. File.Move(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "GTA SanAndreas.zip"), Path.Combine("C:\Program Files (x86)", tb2.Text))
    10. ElseIf System.IO.Directory.Exists("C:\Program Files") Then
    11. 'Hier pessiert noch was.
    12. Else
    13. MsgBox("Es konnte weder ''C:\Program Files'' noch ''C:\Program Files (x86) gefunden werden." & vbCrLf & "Sollte der Ordner vorhanden sein schicken Sie uns eine Nachricht an: emailzensiert", MsgBoxStyle.Critical)
    14. End If
    15. End If
    tb2.Text ist ja ein Verzeichnisname, Du musst schon die Datei verschieben und File.Move erwartet als 2. Parameter auch noch einen Dateinamen, nicht nur ein Directory, weil kann ja sein, dass die Datei danach anders heißt, also musst Du den da mit angeben.

    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 :!: