.png File kopieren

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

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    .png File kopieren

    Hallo,

    ich möchte eine .png Datei aus einem bestimmten Verzeichnis in dein anderes bestimmtes Verzeichnis kopieren und dabei umbenennen. Dies klappt soweit auch ganz gut, bis darauf, dass bei nochmaligen Betätigen des Speicherbuttons eine Kopie der .png Datei ohne Umbenennung erfolgt.

    VB.NET-Quellcode

    1. Private Hauptordner As DirectoryInfo
    2. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    3. If TextBox2.Text = "" Then
    4. MessageBox.Show("Bitte geben Sie eine Datei an!")
    5. Else
    6. Hauptordner = New DirectoryInfo(Path.Combine("Aufträge", TextBox1.Text))
    7. If Not Hauptordner.Exists Then
    8. Hauptordner.Create()
    9. End If
    10. Dim Speicherpfad As String = "Aufträge\"
    11. Dim file = New FileInfo(TextBox2.Text)
    12. Try
    13. file.CopyTo(Path.Combine(Speicherpfad, TextBox1.Text, file.Name), True)
    14. My.Computer.FileSystem.RenameFile(Speicherpfad & TextBox1.Text & "\" & TextBox3.Text, "Pos" & ComboBox1.Text & "_" & "Foto" & ComboBox1.Text & ".png")
    15. Me.PictureBox1.Image.Save(Path.Combine("Aufträge\" & TextBox1.Text & "\" & "Pos" & ComboBox1.Text & "_" & "Skizze" & ComboBox1.Text & ".png"))
    16. Catch ex As Exception
    17. MsgBox(ex.Message)
    18. End Try
    19. End If
    20. End Sub


    Ich weiß, man sollte keine den Fehler nicht per Catch abfangen, dies hab ich mehr zur Diagnose benutzt. Des weiteren habe ich die Frage, wie ich den Catch als

    VB.NET-Quellcode

    1. MessageBox.Show()
    korrekt ausgebe.

    uNbRaKe schrieb:

    Ich weiß, man sollte keine den Fehler nicht per Catch abfangen, dies hab ich mehr zur Diagnose benutzt.
    Falsch - Damit hast du deine Diagnose-Möglichkeiten behindert.
    Mach den TryCatch mal weg.
    Poste dann den neuen Code, den genauen Text der Fehlermeldung, inklusive Angabe der genauen Fehlerzeile.

    Du schreibst es funktioniere soweit gut, aber ich wundere mich darüber, dass Dateioperationen mit einem Pfad, der mit "Aufträge\" beginnt, nicht Fehler werfen.
    Mir fehlt da eine Laufwerksangabe.

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

    @ErfinderDesRadesnull
    Ich habe den Trycatch entfernt.

    VB.NET-Quellcode

    1. Private Hauptordner As DirectoryInfo
    2. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    3. If TextBox2.Text = "" Then
    4. MessageBox.Show("Bitte geben Sie eine Datei an!")
    5. Else
    6. Hauptordner = New DirectoryInfo(Path.Combine("Aufträge", TextBox1.Text))
    7. If Not Hauptordner.Exists Then
    8. Hauptordner.Create()
    9. End If
    10. Dim Speicherpfad As String = "Aufträge\"
    11. Dim file = New FileInfo(TextBox2.Text)
    12. file.CopyTo(Path.Combine(Speicherpfad, TextBox1.Text, file.Name), True)
    13. My.Computer.FileSystem.RenameFile(Speicherpfad & TextBox1.Text & "\" & TextBox3.Text, "Pos" & ComboBox1.Text & "_" & "Foto" & ComboBox1.Text & ".png") 'Fehlerzeile
    14. Me.PictureBox1.Image.Save(Path.Combine("Aufträge\" & TextBox1.Text & "\" & "Pos" & ComboBox1.Text & "_" & "Skizze" & ComboBox1.Text & ".png"))
    15. End If


    Fehlercode:
    System.IO.IOException: "Der Vorgang konnte nicht abgeschlossen werden, da bereits eine Datei im Pfad C:\...\Auftragserfassung\bin\Debug\Aufträge\15\Pos1_Foto1.png vorhanden ist."

    Der Ordner "Aufträge" liegt im Programmverzeichnis und daher habe ich keinen kompletten Pfad angegeben. Ich bin mir nicht über die Richtigkeit einer solchen Anwendung bewusst, doch bisher hat dies immer funktioniert.
    @uNbRaKe ComboBox1.Text kommt mir da etwas zu häufig vor.
    Pack mal die beiden Pfade in separate Variablen, die kannst Du Dir beim Debuggen ansehen.
    Einerseits arbeitest Du mit diesem Ranz VisualBasic My.Computer.FileSystem.RenameFile, andererseits mit FileInfo, die das alles kann.
    Mach das auch in eine FileInfo-Instanz draus und sieh mal in den Docs nach, was es da alles gibt.
    docs.microsoft.com/de-de/dotne…fileinfo?view=netcore-3.1
    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!

    uNbRaKe schrieb:

    ich möchte eine .png Datei aus einem bestimmten Verzeichnis in dein anderes bestimmtes Verzeichnis kopieren und dabei umbenennen


    Wenn ich mir dann den Beitrag von @RodFromGermany durchlese, würde ich denken er meint die Methode CopyTo.
    Nach "rename" zu suchen bringt dich ja auch nicht weiter, weil du ja zuerst kopieren möchtest.
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.

    uNbRaKe schrieb:

    Ich hab es so verstanden, dass ich die "My.Computer.FileSystem.RenameFile Methodenicht verwenden soll.
    So isses.
    Visual Studio - Empfohlene Einstellungen
    Du musst Dir schon mal in den Docs alle Methoden und Properties ansehen, um Deine zu finden.
    Wenn Du wirklich nichts findest, befragst Du Frau Google nach: CSharp Datei umbenennen
    (nicht VB.NET, damit ist gesichert, dass der VisualBasic-Namespace draußen bleibt).
    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!
    @uNbRaKe Weil sie dem Namespace Visualbasic angehört.
    Wenn Dir das als Begründung nicht genügt, fang hier in diesem Thread keine Diskussion an, das kannst Du im Unterforum Off Topic tun:
    vb-paradise.de/index.php/Board/5-Off-Topic/
    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!
    @uNbRaKe Ja.
    Geht es schneller das auszuprobieren
    oder
    einen Post zu schreiben und auf Antwort zu warten?
    Welche dieser beiden Alternativen verschafft Dir die größere Befriedigung?
    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

    VB.NET-Quellcode

    1. ​Hauptordner = New DirectoryInfo(Path.Combine("Aufträge", AuftragsnummerTextBox.Text))
    2. If Not Hauptordner.Exists Then
    3. Hauptordner.Create()
    4. End If
    5. Dim file1 = New FileInfo(Bild1TextBox.Text)
    6. file1.MoveTo(Hauptordner.ToString)


    So wird file1 also in den Pfad Aufträge\AuftragsnummerTextBox.Text\ verschoben, richtig?

    Wie baue ich nun die Umbenennug des file1 ein?
    @uNbRaKe So was:

    VB.NET-Quellcode

    1. Dim file1 = New FileInfo("c:\Temp\aaa.bbb")
    2. file1.MoveTo("d:\Data\ccc.ddd")
    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!
    @uNbRaKe
    Ja.
    Geht es schneller das auszuprobieren
    oder
    einen Post zu schreiben und auf Antwort zu warten?
    Welche dieser beiden Alternativen verschafft Dir die größere Befriedigung?

    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!