Neue Ordner erstellen und Dateien kopieren

  • VB.NET

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

    Neue Ordner erstellen und Dateien kopieren

    Hallo und guten Tag
    Mit folgendem Code lese ich aus einem Verzeichnis die Anzahl der Dateien aus

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim SelectedPath As String
    3. Dim Anzahl As Integer
    4. Dim neueOrdner As Integer ' Anzahl neue Ordner
    5. Private Sub cmdOrdner_auswählen_Click(sender As System.Object, e As System.EventArgs) Handles cmdOrdner_auswählen.Click
    6. Dim osa As New FolderBrowserDialog
    7. osa.Description = "Wo soll gesucht werden?"
    8. If osa.ShowDialog() = DialogResult.OK Then
    9. SelectedPath = osa.SelectedPath
    10. ' Dateien zählen
    11. Dim files As Integer = My.Computer.FileSystem.GetFiles _
    12. (SelectedPath, FileIO.SearchOption.SearchAllSubDirectories, "*.*").Count
    13. Anzahl = files
    14. Label1.Text = CStr(Anzahl) ' wieviel dateien sind im Ordner im Label anzeigen
    15. neueOrdner = CInt(Anzahl / 10) ' Anzahl der Dateien durch 10 dividieren, ergibt Anzahl der neuen Ordner
    16. Label2.Text = CStr(neueOrdner) ' Anzahl der neuen Ordner im Label anzeigen
    17. End If
    18. End Sub
    19. End Class

    sagen wir mal, es sind 60 Dateien im Ordner. Als Beispiel MP3.01 bis MP3.60
    nun sollen 6 neue Ordner (neueOrdner = CInt(Anzahl / 10) erstellt werden und jeweils 10 Dateien in diese kopiert werden
    Ordnername soll mit 00 beginnen und mit 06 enden.
    In den Ordner 01 sollen die Dateien mp3.01-mp3.10 kopiert werden
    In den Ordner 01 sollen die Dateien mp3.11-mp3.20 kopiert werden
    u.s.w
    wie müsste ich da vorgehen ?

    trebron57

    VB.NET-Quellcode

    1. Private Sub CopyFolderTo()
    2. Dim diSrc = New DirectoryInfo("..\..")
    3. Dim dest0 = Path.Combine(diSrc.FullName, "Copies")
    4. Using sources = DirectCast(diSrc.GetFiles("*.*", SearchOption.AllDirectories), IList(Of FileInfo)).GetEnumerator
    5. For Counter = 0 To Integer.MaxValue
    6. Dim diDest = New DirectoryInfo(Path.Combine(dest0, Counter.ToString("00")))
    7. If Not diDest.Exists Then diDest.Create()
    8. For i = 0 To 7
    9. If Not sources.MoveNext Then Return
    10. sources.Current.CopyTo(Path.Combine(diDest.FullName, sources.Current.Name), True)
    11. Next
    12. Next
    13. End Using
    14. End Sub
    @ ErfinderDesRades
    Vielen vielen Dank.
    Macht genau das, was ich geschrieben habe.

    Kann man aber noch verschieben statt kopieren (sources.Current.CopyTo(Path.Combine(diDest.FullName, sources.Current.Name), True).
    Dann bräuchte ich nicht nach Erledigung des Programmes die einzelnen Dateien löschen.
    Danke, auch das ist vollbracht.
    Das Moveto hatte ich schon, aber eine Klammer vergessen.

    Wenn ich jetzt noch in der Zeile" Dim dest0 = Path.Combine(diSrc.FullName, "Copies")"
    das Copies durch den letzten Ordner "C:\Test\test1\ggg ersetzen kann, bin ich wunschlos glücklich

    trebron57

    trebron57 schrieb:

    ersetzen kann
    Schreib es doch einfach hin oder mach Dir eine zweite dest-Variable.

    VB.NET-Quellcode

    1. Dim dest0 = Path.Combine(diSrc.FullName, "ggg")
    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!

    trebron57 schrieb:

    Wenn ich jetzt noch in der Zeile" Dim dest0 = Path.Combine(diSrc.FullName, "Copies")"
    das Copies durch den letzten Ordner "C:\Test\test1\ggg ersetzen kann, bin ich wunschlos glücklich
    Wie gesagt: Eigeninitiative.
    Geliefert habe ich dir eine Sub ohne Parameter - stattdessen enthält sie hauptsächlich 2 lokale Variablen. Bringst du es hin, das umzustricken in eine Sub mit 2 Parametern?
    Hallo , ich noch einmal
    Ich habe jetzt folgendes erreicht:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class Form1
    3. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    4. Dim komplettPfad As String = Path.GetDirectoryName("e\:Messungen\Temperaturen\Maschinen")
    5. Dim Letzterordner As Integer = komplettPfad.LastIndexOf("") + 1
    6. Label1.Text = komplettPfad.Substring(Letzterordner)
    7. Label2.Text = komplettPfad
    8. End Sub
    9. End Class


    Wenn ich jetzt auf den Button1 klicke, passiert folgendes:
    Im Label2 steht: e\:Messungen\Temperaturen ( Mir fehlt also der Ordner Maschinen)
    Im Label 1 steht: Temperaturen (Mein Wunsch ist aber Maschinen)

    Schreibe ich aber :e\:Messungen\Temperaturen\Maschinen\ funktioniert alles wunderbar
    Ausgegeben wird also der Wert der Links vorm Slash steht, ich bräuchte aber den Wert der rechts davon steht.

    Wenn ich das Programm immer nur auf einem Rechner laufen lassen würde,könnte ich den Pfad ja fest eingeben.
    Da ich das Programm aber auf verschiedenen Rechner nutze ,wo die Dateien nicht immer auf e:\ liegen
    wähle ich den Pfad im Programm über FolderBrowserDialog aus.
    Da bekomme ich den letzten Slash aber nicht mitgeliefert.

    trebron57
    Füge es doch selbst hinten mit an...

    Überprüfe ob's da ist (nur so zur sicherheit)
    wenn nein: mach's hin
    wenn ja: finger weg...
    Ich Antworte nach bestem Wissen und Gewissen. Ich übernehme keine Garantie für die Richtigkeit oder Fehlerfreiheit meiner Texte.


    Ich konnte dir helfen?
    - Das ist schön :) Ich würde mich über ein "Hilfreich" freuen ^^
    @trebron57:: So was:

    VB.NET-Quellcode

    1. Dim di = New IO.DirectoryInfo("e:\Messungen\Temperaturen\Maschinen")
    2. MessageBox.Show(di.Parent.ToString & Environment.NewLine & di.Parent.Parent.ToString)
    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!
    Mir scheint, der TE weiß nicht, was eine Sub mit Parametern ist, oder wo liegt das Problem bei

    ErfinderDesRades schrieb:

    Geliefert habe ich dir eine Sub ohne Parameter - stattdessen enthält sie hauptsächlich 2 lokale Variablen. Bringst du es hin, das umzustricken in eine Sub mit 2 Parametern?

    trebron57 schrieb:

    ich brauche aber das letzte
    Wie komme ich an Informationen :?:

    VB.NET-Quellcode

    1. di.Name
    Bilder
    • DirInfo.png

      64,85 kB, 643×524, 132 mal angesehen
    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!
    ist eigentlich nicht soo schwer. guggemol

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Das ist ein Methodenkopf.
    Was sind die Parameter (es sind 2), und was sind deren Datentypen?

    ist auch fast egal, denn dann ist für dich eh dieses Buch lesen (hingegen das Galileio-Openbook ist Mist) angesagt.

    Ein anneres Problem ist ein Kommunikations-Problem: Wenn du eine Frage hast, dann solltest du sie fragen. "Ich glaub nicht" ist keine Frage - so kommt man normalerweise nicht weiter.
    @ErfinderDesRades
    Du hast mir eine Frage gestellt:

    trebron57 schrieb:

    Vielen Dank für eure Antworten
    Bringst du es hin, das umzustricken in eine Sub mit 2 Parametern?


    trebron57

    Darauf gab ich die dir die Antwort: Ich glaube nicht
    Ein anneres Problem ist ein Kommunikations-Problem: Wenn du eine Frage hast, dann solltest du sie fragen. Ich glaub nicht ist keine Frage - so kommt man normalerweise nicht weiter

    Also kann das für mich kein Kommunikations-Problem sein weil es eine Antwort und keine Frage ist

    trebron57

    trebron57 schrieb:

    Also kann das für mich kein Kommunikations-Problem sein weil es eine Antwort und keine Frage ist
    Ich freue mich, dass Du nun keine weiteren Probleme mit VB hast. X(
    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!

    trebron57 schrieb:

    Also kann das für mich kein Kommunikations-Problem sein weil es eine Antwort und keine Frage ist

    glaub du hast mich falsch verstanden. Das Kommunikations-Problem ist ja grade, dass das eine lapidare Antwort ist, und eigentlich wäre das Thema damit erledigt.

    Nur - ohne zu wissen, wie man eine Sub mit Parametern programmiert, kannst du dein Problem nicht lösen, daher unterstelle ich dir (muss ich!), dass du eine Frage hast (nämlich: "wie geht das?"), die du aber nicht fragst. Trotzdem habe ich auf diese nicht gestellte Frage geantwortet, weil absehbar ist, dass du ohne das KnowHow nix zustande bringen kannst.

    Und das nenne ich ein Kommunikationsproblem, wenn du Fragen, die du hast, nicht stellst, oder mich zwingst, dir Fragen zu unterstellen (und vlt. irre ich mich auch mit meinen Annahmen), oder ich könnte es ja auch lassen, blos wie wolltest du dann weiter kommen, und son Kuddelmuddel usw.