Dateien Verschieben

  • VB.NET

Es gibt 51 Antworten in diesem Thema. Der letzte Beitrag () ist von keydrow.

    Dateien Verschieben

    Hallo leute,ich will aus Ordner 1 in Ordner 2 Dateien Verschieben. Doch dies Funktioniert nicht was hab ich Falsch oder Fehlt mir noch?

    VB.NET-Quellcode

    1. For Each datei In My.Computer.FileSystem.GetFiles("PfadVon")
    2. My.Computer.FileSystem.MoveFile("PfadVon", "PfadNach")
    3. Next()
    Also so:

    VB.NET-Quellcode

    1. For Each datei In My.Computer.FileSystem.GetFiles("")
    2. System.IO.File.Move("", "")
    3. Next

    und dann wird auch nicht zweimal dieselbe Datei Verschoben?

    VB.NET-Quellcode

    1. For Each F In IO.Directory.GetFiles("C:\Fraps\Movies\")
    2. IO.File.Move(F, "D:\Benutzer\Marvin\Desktop" & IO.Path.GetFileName(F))
    3. Next

    Fehler:
    Zusätzliche Informationen: Die Datei ist vorhanden.
    Bitte IO.Path.Combine benutzten. Geb dir den Pfad mal mit einer Messagebox aus und dann siehste denke ich mal den Fehler. Muss es nicht auch IO.File.Move(F, "D:\Benutzer\Marvin\Desktop\" & IO.Path.GetFileName(F)) heißen?
    Mfg
    Vincent

    Zu wissen was in diesen Fall F ist, gehört eigentlich zum "FF", F repräsentiert in der Schleife 1 mal Pro Datei im Ausgangs Ordner den Pfad zu derjenigen bzw. sie selbst.

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

    Also "For Each F" heist so viel wie "für jede Datei"
    //EDIT

    So ich glaube ich komme der Lösung näher

    VB.NET-Quellcode

    1. Dim F As String
    2. F = "C:\Fraps\Movies\"
    3. For Each F In IO.Directory.GetFiles("C:\Fraps\Movies")
    4. My.Computer.FileSystem.MoveFile("C:\Fraps\Movies", "D:\Users\Marvin\Desktop")
    5. Next
    6. End Sub

    oder ist das völliger Käse.

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

    völliger Käse.
    a) Hat man dir schon gesagt: Kein My.* Namespace -> nimm den System.IO Namespace
    b) MoveFILE -> heißt Datei verschieben. Es heißt nicht MoveFilesOfDirectory sondern MoveFile. Somit gibst du als Parameter auch die Dateinamen an.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    ziemlich Käse, aber das hast du wohl schon selbst rausgefunden. Zunächstmal: Verwende DirectoryInfo und FileInfo - gugge [VB.NET] System.IO Namespace richtig nutzen

    Weiters kann "D:\Users\Marvin\Desktop" nicht ziel einer Datei-Verschiebung sein, denn "D:\Users\Marvin\Desktop" gibts schon, und es ist ein Ordner, und keine Datei. Für eine Verschiebung musst du den vollständigen Dateinamen angeben, nicht irgendeinen Ordner, und denken, der wird den Namen schon dranhängen.

    VB.NET-Quellcode

    1. ' ganz oben Imports System.IO
    2. Dim destDirectory As String = "C:\Users\Marvin\Desktop"
    3. For Each sourceFile In IO.Directory.GetFiles("C:\Fraps\Movies") 'sourceFile ist z.B: C:\Fraps\Movies\tmp.txt
    4. Dim sourceFileName As String = Path.GetFileName(sourceFile) 'sourceFileName ist z.B. tmp.txt
    5. Dim destFileName As String = Path.Combine(destDirectory, sourceFileName) 'destFileName ist z.B. C:\Users\Marvin\Desktop\tmp.txt
    6. File.Move(sourceFile, destFileName)
    7. Next


    Als Denkanstoß.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Der Code

    VB.NET-Quellcode

    1. Dim destDirectory As String = "C:\Users\Marvin\Desktop\"
    2. For Each sourceFile In IO.Directory.GetFiles("C:\Fraps\Movies\") 'sourceFile ist z.B: C:\Fraps\Movies\tmp.txt
    3. Dim sourceFileName As String = Path.GetFileName(sourceFile) 'sourceFileName ist z.B. tmp.txt
    4. Dim destFileName As String = Path.Combine(destDirectory, sourceFileName) 'destFileName ist z.B. C:\Users\Marvin\Desktop\tmp.txt
    5. ListBox1.Items.Add(sourceFileName)
    6. File.Move(sourceFile, destFileName)
    7. Next

    Funktioniert schon so wie er ist doch wenn ich aus

    VB.NET-Quellcode

    1. Dim destDirectory As String = "C:\Users\Marvin\Desktop\"
    ein

    VB.NET-Quellcode

    1. Dim destDirectory As String = "D:\Users\Marvin\Desktop\"
    mache kommt
    System.IO.DirectoryNotFoundException
    vermutlich weil das Verzeichnis nicht existiert?

    Edit:

    Bsp:

    VB.NET-Quellcode

    1. Dim dir As New DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.Desktop))
    2. For Each fi As FileInfo In dir.GetFiles("*.txt", SearchOption.TopDirectoryOnly)
    3. fi.MoveTo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), fi.Name))
    4. Next


    so würde das ganze ein bisschen vernünftiger aussehen.

    Die Parameter müsstes du natürlich noch verändern ;)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ident“ ()

    Ich will es ja nicht auf den Desktop haben war nur als Beispiel und D:\Users\Marvin\Desktop\ gibt es zu 100% da auf D:\ der Desktop ist den ich sehe.

    //Edit

    :S Ich habe grade mal D:\.....\Dokumente\Ordner genommen und dorthin geht es. Mein Desktop ist Verbuggt

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

    Lösung mit Listbox um alle oder nur gewählte zu verschieben ;)

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. 'Ordner auslesen + Multiselect
    4. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    5. 'AOrdnerin Listbox schreiben - (Form 1)
    6. Dim Dateiliste() As String = System.IO.Directory.GetFiles("C:\Musik\Blümche -Retro")'Hier Eingang und Ordner 3 ist der Ausgang
    7. ListBox1.Items.AddRange(Dateiliste)
    8. 'Multiselect
    9. Me.ListBox1.SelectionMode = SelectionMode.MultiSimple
    10. End Sub
    11. 'Selecktedt Auswahl mit rechter Maustaste aufheben
    12. Private Sub FileListBox1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseDown
    13. If e.Button = Windows.Forms.MouseButtons.Right Then
    14. ListBox1.SelectedIndex = ListBox.NoMatches
    15. End If
    16. End Sub
    17. 'Alle verschieben
    18. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    19. For i As Integer = 0 To ListBox1.Items.Count - 1
    20. On Error Resume Next
    21. My.Computer.FileSystem.MoveFile(CStr(ListBox1.Items(i)), "C:\Users\zeus\Desktop\Neuer Ordner (3)\" & IO.Path.GetFileName(CStr(ListBox1.Items(i))), True)
    22. Next
    23. On Error Resume Next
    24. ListBox1.Items.Clear()
    25. Exit Sub
    26. End Sub
    27. 'Nur markierte verschieben
    28. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    29. For i As Integer = 0 To ListBox1.Items.Count - 1
    30. On Error Resume Next
    31. My.Computer.FileSystem.MoveFile(CStr(ListBox1.SelectedItems(i)), "C:\Users\zeus\Desktop\Neuer Ordner (3)\" & IO.Path.GetFileName(CStr(ListBox1.SelectedItems(i))), True)
    32. Next
    33. On Error Resume Next
    34. For i As Integer = ListBox1.Items.Count To 0 Step -1
    35. If ListBox1.SelectedIndices.Contains(i) = True Then ListBox1.Items.RemoveAt(i)
    36. Next
    37. Exit Sub
    38. End Sub
    39. End Class



    Eine Listbox und zwei Button -Fertig !

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „TVX“ ()