Dateien Verschieben

  • VB.NET

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

    GETESTET UND GEHT !!!

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. If IO.Directory.Exists("C:\Musik\Blümche -Retro") Then
    5. If IO.Directory.Exists("C:\Users\zeus\Desktop\Neuer Ordner (3)") Then
    6. For Each datei In My.Computer.FileSystem.GetFiles("C:\Musik\Blümche -Retro", FileIO.SearchOption.SearchTopLevelOnly, "*.mp3")
    7. Dim Dateiname = My.Computer.FileSystem.GetName(datei)
    8. My.Computer.FileSystem.MoveFile(datei, My.Computer.FileSystem.CombinePath("C:\Users\zeus\Desktop\Neuer Ordner (3)", Dateiname))
    9. Next
    10. MsgBox("Fertig")
    11. Else
    12. MsgBox("Der Zielordner wurde nicht gefunden ")
    13. End If
    14. Else
    15. MsgBox("Der Quellordner wurde nicht gefunden ")
    16. End If
    17. End Sub
    18. End Class
    Danke und ? und das mit der ListBox hatte ich auch selber hinbekommen da ich überprüfen wollte welche Dateien im Ordner sind und trotzdem nochmal danke. Ich habe nur ein "Problem", es sieht so aus als würde das Programm Einfrieren während es die Dateien Verschiebt. Kann man den Windows Dialog, der beim Kopieren etc. angezeigt wird auch hier Verwenden und wird das einfrieren dadurch Verhindert
    Hab dir was von (( Mr. VB 2008 Man )) Dazu umgebaut


    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.IO
    3. Imports System.Threading
    4. Public Class Form1
    5. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    6. Control.CheckForIllegalCrossThreadCalls = False
    7. Dim T As New Thread(AddressOf Kopierern1)
    8. T.Start()
    9. End Sub
    10. Sub KopiereDateivon(ByVal Source As String, ByVal Target As String)
    11. File.Move(Source, Target)
    12. End Sub
    13. Sub Kopierern1()
    14. Dim verzeichnis As String = "C:\Musik\Blümche -Retro\" ' vom verschiebe verzeichnis
    15. Dim insverzeichnis As String = "C:\Users\zeus\Desktop\Neuer Ordner (3)\" ' ins verzeichnis
    16. Dim OrdnerListe As New List(Of String)
    17. Dim DateiListe As New List(Of String)
    18. For Each Ordner In My.Computer.FileSystem.GetDirectories(verzeichnis, FileIO.SearchOption.SearchAllSubDirectories) ' Ordner Suchen
    19. Ordner = Ordner.Replace(verzeichnis, "")
    20. OrdnerListe.Add(Ordner) ' Ordner in die Liste einfügen
    21. Directory.CreateDirectory(insverzeichnis + Ordner) ' Unterordner erstellen
    22. Next
    23. For Each Datei In My.Computer.FileSystem.GetFiles(verzeichnis, FileIO.SearchOption.SearchAllSubDirectories) ' Dateien Suchen
    24. Datei = Datei.Replace(verzeichnis, "")
    25. DateiListe.Add(Datei) ' Dateien in die Liste einfügen
    26. Next
    27. ProgressBar1.Maximum = DateiListe.Count ' ProgressBar einstellen
    28. ProgressBar1.Value = CInt("0")
    29. For Each file In DateiListe ' Dateien verschieben
    30. Dim DateiInfo As String = My.Computer.FileSystem.GetFileInfo(verzeichnis + file).Name ' DateiName
    31. Label1.Text = DateiInfo ' Der Status muss ja auch angezeigt werden ^^
    32. KopiereDateivon(verzeichnis + file, insverzeichnis + file) ' Datei verschieben
    33. ProgressBar1.Increment(1) ' ProgressBar füllen
    34. Next
    35. MsgBox("Fertig!", MsgBoxStyle.Information, "Info")
    36. End Sub
    37. End Class


    Der verschiebt jetz stat zu kopieren nur an den Pfaden am Ende den nicht vergessen (( \ )) :!:

    Gebraucht wird : :!:

    Button1
    Label1.Text
    ProgressBar1


    Und der betziht momentan unterordner mit ein ,kannst de aber ruck zuck ändern (( SearchAllSubDirectories )) zu (( SearchTopLevelOnly ))

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

    keydrow schrieb:

    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



    Ich hab dir gesagt du solltest die Parameter ändern wie du sie für nötig hälst. Environment.SpecialFolder ist eine Enumeration, die den Verzeichnispfad des Desktops enthält. Mein Code-Snippet, ist genau der richtige auf dem du aufbauen solltest. Grundsätzlich nicht auf TVX hören, den Crap bleibt Crap und wenn man die Scheiße nicht verstehen will, bleibts Crap.
    Jetzt mal im ernst, wenn du das nicht verstehst, weiß ich auch nicht wo man bei dir anfangen soll.. willst du eigentlich irgendwie programmieren oder willst du das ganze vernünftig lernen/verstehen/anwenden? Du weißt vermutlich nicht einmal was eine Enumeration ist, ich unterstell dir sogar das du nicht einmal weißt was ein Parameter im Bezug auf meinem Code sein soll...

    TVX alles was er jemals gepostet hat war ein beispiel für schlechten Code-Stil und mangelnder kompetenz etwas vernünftiges zu schreiben.

    Lern vernünftig programmieren und lies das Buch microsoft.com/germany/msdn/akt…005dasentwicklerbuch.aspx es ist kostenlos und ziemlich gut, wenn dus nicht tust, wirst du niemals etwas vernünftiges programmieren können.
    Komm ma wieder runter ok! So kannst du mit andren schreiben aber nicht mit mir!! Ich habe dir nichts getan. Ich haben nur nicht Verstanden was DAS
    Ich hab dir gesagt du solltest die Parameter ändern wie du sie für nötig hälst. Environment.SpecialFolder ist eine Enumeration, die den Verzeichnispfad des Desktops enthält. Mein Code-Snippet, ist genau der richtige auf dem du aufbauen solltest. Grundsätzlich nicht auf TVX hören, den Crap bleibt Crap und wenn man die Scheiße nicht verstehen will, bleibts Crap.
    mit dem
    Ich habe grade mal D:\.....\Dokumente\Ordner genommen und dorthin geht es. Mein Desktop ist Verbuggt
    zu tun hat. Es gibt was das nennt sich anständiger Umgangston.
    Ich bin total auf dem Boden geblieben, und mein Umgangston in Frage zu stellen ist schon ziemlich dreist von dir..

    Environment.SpecialFolder.Desktop enthält einen Desktop-Pfad.

    Du willst Dateien verschieben, dies kannst du mit meinem Code-Snippet, indem du deine vorgaben in den Parametern änderst.

    Falls du Kritik nicht annehmen kannst, ist das nicht mein Problem. Ich bin's aber auch mittlerweile Leid dir weiterzuhelfen.

    Viel Glück noch.
    Ich kann Kritik annehmen aber nur wenn man sie Anständig formuliert. Ich denke mal du hast meinen Satz nicht Verstanden. Damit wollte ich lediglich aussagen das D:\Users\Marvin\Desktop\ laut VB nicht vorhanden ist. Ich dachte ich hatte einen Fehler gemacht doch er konnte den Pfad nicht finden.

    ident schrieb:

    Ich bin total auf dem Boden geblieben, und mein Umgangston in Frage zu stellen ist schon ziemlich dreist von dir.

    Ich zitiere:

    ident schrieb:

    Grundsätzlich nicht auf TVX hören, den Crap bleibt Crap und wenn man die Scheiße nicht verstehen will, bleibts Crap.

    ident schrieb:

    Jetzt mal im ernst, wenn du das nicht verstehst, weiß ich auch nicht wo man bei dir anfangen soll..
    Du weißt vermutlich nicht einmal was eine Enumeration ist, ich unterstell dir sogar das du nicht einmal weißt was ein Parameter im Bezug auf meinem Code sein soll...
    TVX alles was er jemals gepostet hat war ein beispiel für schlechten Code-Stil und mangelnder kompetenz etwas vernünftiges zu schreiben.

    8| 8o :huh: :rolleyes: Alles klar... :whistling:

    Hallo keydrow,

    Die Ordner werden nicht erkannt, wenn der Pfad mit einem \ endet. Ein \ heisst soviel, wie dass der Pfad einen Unterordner beschreibt: in deinem Fall aber einen ohne Namen:

    Vorher (Fehler):
    D:\Users\Marvin\Desktop\

    Nachher (hat funktioniert):
    D:\Users\Marvin\Dokumente\Ordner

    Dürfte ich dir evtl. noch meine Lösung geben?

    VB.NET-Quellcode

    1. Dim SourcePath As String = "C:\Fraps\Movies"
    2. Dim DestPath As String = "C:\Users\Marvin\Desktop"
    3. If IO.Directory.Exists(SourcePath) Then
    4. For Each Dir As IO.DirectoryInfo In New IO.DirectoryInfo(SourcePath).GetDirectories("*", IO.SearchOption.AllDirectories)
    5. If Not IO.Directory.Exists(Dir.FullName.Replace(SourcePath, DestPath)) Then
    6. IO.Directory.CreateDirectory(Dir.FullName.Replace(SourcePath, DestPath))
    7. End If
    8. For Each File As IO.FileInfo In Dir.GetFiles
    9. File.MoveTo(IO.Path.Combine(DestPath & "\", File.Name))
    10. Next
    11. Next
    12. Else
    13. MsgBox("Pfad nicht gefunden")
    14. End If

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Higlav“ () aus folgendem Grund: Code angepasst

    Hey,

    @keydrow

    wenn du meinst ich würde mich nicht angemessen verhalten, dann tuts mir leid, kommt nicht wieder vor.

    @Higlav

    Du machst es nicht besser als TVX..

    Zeile 5 - File As FileInfo

    Du hast eine FileInfo warum benutzt du dann noch IO.File.Move? FileInfo besitzt die Methode MoveTo.

    Tipp: zum verbinden von Pfaden würde ich die Methode Combine aus System.IO.Path benutzen.

    VB.NET-Quellcode

    1. Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
    enthält den Pfad deines Desktops.
    Dann is ja gut das wir uns alle wieder Verstehn :P

    Danke Higlav für deine Antwort. Ich glaube ident mein Anstand

    VB.NET-Quellcode

    1. Dim SourcePath As String = "C:\Fraps\Movies"
    2. Dim DestPath As String = "C:\Users\Marvin\Desktop"
    3. If IO.Directory.Exists(SourcePath) Then
    4. If Not IO.Directory.Exists(DestPath) Then IO.Directory.CreateDirectory(DestPath)
    5. For Each File As IO.FileInfo In New IO.DirectoryInfo(SourcePath).GetFiles("*", IO.SearchOption.AllDirectories)
    6. 'Damit werden alle Dateien ausgelesen: kein rekursives durchwühlen nötig.
    7. IO.File.Move(File.FullName, IO.Path.Combine(DestPath & "\", File.Name))
    8. Next
    9. End If

    wie du es gemacht hast so:

    VB.NET-Quellcode

    1. Dim SourcePath As String = "C:\Fraps\Movies"
    2. Dim DestPath As String = "C:\Users\Marvin\Desktop"
    3. If IO.Directory.Exists(SourcePath) Then
    4. If Not IO.Directory.Exists(DestPath) Then IO.Directory.CreateDirectory(DestPath)
    5. For Each File As IO.FileInfo In New IO.DirectoryInfo(SourcePath).GetFiles("*", IO.SearchOption.AllDirectories)
    6. File.MoveTo(DestPath)
    7. Next
    8. End If
    Wenn ich falsch liege korrigiert mich.
    Joa, so passt's scho'.

    Ich hab' meinen Code in Post #32 nochmals überarbeitet. Denn vorher wurden nicht alle Ordner angelegt, die vorher im SourcePath waren.
    Stichwort: Threading msdn.microsoft.com/en-us/library/system.threading.aspx

    Beispiel:

    VB.NET-Quellcode

    1. Dim foo As New Thread(New ThreadStart(Sub()
    2. Dim di As New DirectoryInfo("C:\Fraps\Movies")
    3. If di.Exists Then
    4. For Each fi As FileInfo In di.GetFiles("*.*", SearchOption.AllDirectories)
    5. fi.MoveTo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), fi.Name))
    6. Next
    7. End If
    8. End Sub))
    9. foo.SetApartmentState(ApartmentState.STA)
    10. foo.Start()

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

    Mein jetziger Code ist:

    VB.NET-Quellcode

    1. Dim foo As New Thread(New ThreadStart(Sub()
    2. Dim destDirectory As String = tb_ziel.Text
    3. For Each sourceFile In IO.Directory.GetFiles(tb_videos.Text)
    4. Dim sourceFileName As String = Path.GetFileName(sourceFile)
    5. Dim destFileName As String = Path.Combine(destDirectory, sourceFileName)
    6. File.Move(sourceFile, destFileName)
    7. Next
    8. End Sub))
    9. foo.SetApartmentState(ApartmentState.STA)
    10. foo.Start()

    Doch wenn ich von z.B. C:\ nach D:\ Kopieren will bekomme ich immer Verschiedenste Fehler. Zum Beispiele das der Ordner nicht Existiert , die Datei schon vorhanden ist etc. Zum Besseren Verständnis meines Problems, hier ein51sec Video.