Dateien innerhalb eines Ordners verschieben & ersetzen

  • VB.NET

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

    Dateien innerhalb eines Ordners verschieben & ersetzen

    Hallo,
    ich bin noch ein Anfänger in Visual Basic 2010 & bräuchte dringend Hilfe :(
    Es geht darum das ich innerhalb eines Ordners Dateien verschieben & ersetzen will. Da viele einen unterschiedlichen Pfad haben.
    z.B: Meine freunde haben alle den Ordner "X" & in dem sind Ordner "A" & "B" dinne ( mein Programm auch ), im Ordner "A"ist eine datei namens "Foto1" & im Ordner B auch! Aber die 2 Fotos heißen zwar gleich, sind aber verschieden. Jetzt will ich vom Ordner "A" das "Foto1" in den Ordner "B" kopieren & ersetzen.


    Wie stelle ich das an? Welche befehle? Auch nach langem Googlen habe ich leider nichts gefunden, ich hoffe hier kann mir jemand helfen! :(

    VB.NET-Quellcode

    1. Dim fi As New IO.FileInfo("Deine Datei")
    2. fi.CopyTo("Zieldateiname", True)

    Du musst "Deine Datei" durch den vollen Dateinamen vom Foto in Ordner A erstetzem und "Zieldateiname" durch den vollen Dateinamen vom alten Foto in Ordner B
    Zum Beispiel:

    VB.NET-Quellcode

    1. Dim fi As New IO.FileInfo("C:\Bilder\A\Foto1.jpg")
    2. fi.CopyTo("C:\Bilder\B\Foto1.jpg", True)

    Damit wird C:\Bilder\A\Foto1.jpg nach C:\Bilder\B\Foto1.jpg Kopiert, und falls C:\Bilder\B\Foto1.jpg schon existoert wird es überschrieben.
    Grüße,
    Lukas

    Fragen über Themen im Forum per Konversation werden gelöscht und die Absender blockiert...
    Hi, danke für deine schnelle & hilfreiche Antwort.
    Aber was ist wenn einer meiner Freunde den Ordner A in ("C:\Dokumente\A\Foto.jpg") hat?
    Ich will z.B das meine Freunde das Programm nur in den Ordner "X" legen & Das Programm dann innerhalb diesem Ordner arbeitet, geht das überhaubt? ;/

    Malizero schrieb:

    geht das überhaubt?
    Wenn Du vom Betriebssystem her die Redhre hast, kein Problem.
    neben fi.CopyTo(...) gibt es auch fi.MoveTo(...), da wird die Fatei verschoben, nicht kopiert.
    Wenn Du zwischendurch ein neues Verzeichnis anlegen willst, machst Du IO.Directory.CreateDirectory(DEIN_PFAD).
    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!
    @Malizero

    Normal müsstest du die Code-Ansicht noch offen haben. Wenn ja einfach in den Code einen Rechtsklick und auf Ansicht-Designer klicken (falls du es auf Deutsch hast). Falls du den Code auch nicht siehst gehst du in der Menüleiste auf Ansicht und wählst Projektmappen-Explorer aus. Dann wenn deine Form Form1 hießt auf Form1.vb einen Doppelklick durchführen. Dann müsste der Designer ebenfalls angezeigt werden.

    Falls du Visual Studio auf Englisch hast:
    Statt Ansicht-Designer glaube ich View Designer und statt Projektmappen-Explorer Solution-Explorer

    Gruß
    Switcherlapp97
    RubiksCubeSolver


    Jetzt im Showroom
    @Malizero

    Das geht mit folgendem Sub:

    VB.NET-Quellcode

    1. Public Sub CopyFolder(ByVal SourcePath As String, ByVal DestinationPath As String, Optional ByVal SubFolder As Boolean = True, Optional ByVal OverWrite As Boolean = True)
    2. ' Falls Zielordner nicht existiert, jetzt erstellen
    3. If Not System.IO.Directory.Exists(DestinationPath) Then
    4. System.IO.Directory.CreateDirectory(DestinationPath)
    5. End If
    6. ' zunächst alle Dateien des Quell-Ordners ermitteln und kopieren
    7. Dim sFiles() As String = System.IO.Directory.GetFiles(SourcePath)
    8. Dim sFile As String
    9. For i As Integer = 0 To sFiles.Length - 1
    10. ' Falls Datei im Zielordner bereits existiert, nur kopieren, wenn Parameter OverWrite auf True ist
    11. sFile = sFiles(i).Substring(sFiles(i).LastIndexOf("\") + 1)
    12. If OverWrite Or Not System.IO.File.Exists(DestinationPath & "\" & sFile) Then
    13. System.IO.File.Copy(sFiles(i), DestinationPath & "\" & sFile, True)
    14. End If
    15. Next i
    16. If SubFolder Then
    17. ' jetzt alle Unterordner ermitteln und die CopyFolder-Funktion rekursiv aufrufen
    18. Dim sDirs() As String = System.IO.Directory.GetDirectories(SourcePath)
    19. Dim sDir As String
    20. For i As Integer = 0 To sDirs.Length - 1
    21. If sDirs(i) <> DestinationPath Then
    22. sDir = sDirs(i).Substring(sDirs(i).LastIndexOf("\") + 1)
    23. CopyFolder(sDirs(i), DestinationPath & "\" & sDir, True, OverWrite)
    24. End If
    25. Next i
    26. End If
    27. End Sub

    Aufrufen tust du das dann so:

    VB.NET-Quellcode

    1. CopyFolder("DeinOrdnerPfad", "ZielOrdnerPfad")

    Die Wahrheitswerte OverWrite und Subfolder sind standardmäßig auf True das heißt:
    Alle Dateien (auch in Unterordner) werden kopiert. Falls eine Datei bereits vorhanden ist, wird die alte überschrieben.

    Gruß
    Switcherlapp97
    RubiksCubeSolver


    Jetzt im Showroom