Ordner mit mehreren Unterordnern erstellen.

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von iphone747.

    Ordner mit mehreren Unterordnern erstellen.

    Schönen guten Tag,

    ich bin mal wieder auf ein Problem gestoßen, bei dem ich nicht mehr weiterkomme.

    Es geht um ein Programm, dass einen Ordner mit mehreren Unterordnern erstellen soll.
    klingt anfangs recht einfach, allerdings hätte ich hier noch ein paar Sonderwünsche dir mir das ganze etwas erschweren.


    Das prinzipielle Erstellen von einem Ordner in VB ist kein Problem. Hierzu gibt auch google und die Suchfunktion sehr viel her!

    Das Programm sollte aus einer Textbox und einem Button bestehen. In die Textbox soll später einmal der Ordnername eingegeben werden z.B.
    "Auftrag Nr.123"
    durch Drücken des Buttons soll dann zuerst geprüft werden, ob dieser Ordner bereits existiert und wenn "Ja" eine Fehlermeldung erscheint die den Nutzer warnt. Existiert der Ordner nicht so wird er erstellt.

    Das ist der leichte Teil, der auch schon funktioniert. Hier mein Script:


    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. If System.IO.Directory.Exists("C:\Users\Username\Desktop\Arbeit\2013" & TextBox1.Text) = True Then
    4. MsgBox("Ordner existiert bereits", MsgBoxStyle.Critical)
    5. Else
    6. System.IO.Directory.CreateDirectory("C:\Users\Username\Desktop\Arbeit\2013" & TextBox1.Text)
    7. End If
    8. End Sub



    Mein erstes Problem taucht aber leider schon beim Erstellen von Unterordnern auf. Die Unterordner sollen gleich in den gerade erstellten Ordner z.B. "Auftrag 1" erstellt werden. Die Unterordner müssen nicht variabel sein sonder sollen immer den gleichen Namen bekommen. Z.B "Text", "Bilder", "Zeichnungen".
    Damit das ganze dann etwa so aussieht:

    -Auftrag Nr. <-- Hauptordner
    -Text <-- Unterordner
    - Bilder <-- Unterordner
    - Zeichnungen <-- Unterordner
    -Auftrag Nr.
    -Text
    - Bilder
    - Zeichnungen

    Mein Problem ist hier, dass ich nicht weiß mit welchem Befehl ich den Name des gerade erstellten Ordners weitergebe um darin gleich wieder weitere Ordner zu erstellen?


    Als zweite schwierigkeit die ich mir gesetzt habe ist der Jahreswechsel. Das Programm soll anhand des Computer Datums (hier ist nur die Jahreszahl wichtig) wissen in welchem Jahr man gerade ist und dann die oben beschriebenen Hauptordner (mit Unterordner) in diesen Jahresordner abspeichert.
    Besteht dieser Jahresordner noch nicht sollte er ebenfalls erstellt werden :D :D

    VB.NET-Quellcode

    1. Format(Now, "yyyy")


    -2012
    -Auftrag 1 <-- Hauptordner
    -Text <-- Unterordner
    - Bilder <-- Unterordner
    - Zeichnungen <-- Unterordner
    -Auftrag 2
    -Text
    - Bilder
    - Zeichnungen
    -2013
    -Auftrag 1 <-- Hauptordner
    -Text <-- Unterordner
    - Bilder <-- Unterordner
    - Zeichnungen <-- Unterordner
    -Auftrag 2
    -Text
    - Bilder
    - Zeichnungen

    Ohh man ich hoffe man versteht einigermaßen was ich meine und wo meine Probleme liegen.
    Natürlich würde ich mich sehr freuen wenn mir hierzu jemand einen Tipp geben könnte mit welchen befehlen ich weitermachen sollte um die Probleme in den Griff zu bekommen.

    Danke euch allen
    Für dein erstes Problem:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class Form1
    3. Private Hauptordner As DirectoryInfo
    4. Private paths As String = "Hauptordner Pfad"
    5. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    6. Hauptordner = New DirectoryInfo(Path.Combine(paths, TextBox1.Text))
    7. If Not Hauptordner.Exists Then
    8. Hauptordner.Create()
    9. Dim Unterordner As DirectoryInfo() = {New DirectoryInfo(Path.Combine(Hauptordner.FullName, "Text")),
    10. New DirectoryInfo(Path.Combine(Hauptordner.FullName, "Bilder")),
    11. New DirectoryInfo(Path.Combine(Hauptordner.FullName, "Zeichnungen"))}
    12. For Each item In Unterordner
    13. item.Create()
    14. Next
    15. Return
    16. End If
    17. MessageBox.Show("Bereits vorhanden!")
    18. End Sub
    19. End Class

    Damit wird, falls der Ordner nicht vorhanden ist, ein Hauptordner mit 3 Unterordnern erstellt.
    Hier ich hoffe das ich dein Anliegen richtig verstanden habe:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. CreateDirectorys("C:\Users\Username\Desktop\Arbeit")
    3. My.Settings.Save()
    4. End Sub
    5. Dim Auftrag As String = "Auftrag " My.Settings.Auftragsnummer & ""
    6. Dim TextOrdner As String = "Text"
    7. Dim BilderOrdner As String = "Bilder"
    8. Dim ZeichnungenOrdner As String = "Zeichnungen"
    9. Sub CreateDirectorys(ByVal ÜbergeordneterOrdnerpfad As String)
    10. If Not ÜbergeordneterOrdnerpfad.EndsWith("") Then
    11. ÜbergeordneterOrdnerpfad &= ""
    12. End If
    13. If Not IO.Directory.Exists(ÜbergeordneterOrdnerpfad & Now.ToString("YYYY")) Then
    14. IO.Directory.CreateDirectory(ÜbergeordneterOrdnerpfad & Now.ToString("YYYY"))
    15. End If
    16. If Not IO.Directory.Exists(ÜbergeordneterOrdnerpfad & Now.ToString("YYYY") & Auftrag) Then
    17. IO.Directory.CreateDirectory(ÜbergeordneterOrdnerpfad & Now.ToString("YYYY") & Auftrag)
    18. End If
    19. If Not IO.Directory.Exists(ÜbergeordneterOrdnerpfad & Now.ToString("YYYY") & Auftrag & TextOrdner) Then
    20. IO.Directory.CreateDirectory(ÜbergeordneterOrdnerpfad & Now.ToString("YYYY") & Auftrag & TextOrdner)
    21. End If
    22. If Not IO.Directory.Exists(ÜbergeordneterOrdnerpfad & Now.ToString("YYYY") & Auftrag & BilderOrdner) Then
    23. IO.Directory.CreateDirectory(ÜbergeordneterOrdnerpfad & Now.ToString("YYYY") & Auftrag & BilderOrdner)
    24. End If
    25. If Not IO.Directory.Exists(ÜbergeordneterOrdnerpfad & Now.ToString("YYYY") & Auftrag & ZeichnungenOrdner) Then
    26. IO.Directory.CreateDirectory(ÜbergeordneterOrdnerpfad & Now.ToString("YYYY") & Auftrag & ZeichnungenOrdner)
    27. End If
    28. My.Settings.Auftragsnummer += 1
    29. End Sub


    Ok jetzt musst du nur noch im Projektmappenexplorer auf My Project klicken und dann unter Einstellungen Auftragsnummer hinzufügen. Auftragsnummer muss ein Integer oder Long sein.
    Habs nicht getestet aber ich denke das es so oder ähnlich gehen müsste.

    MfG
    optz

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

    @optz
    Warum überprüfst du in einem Ordner den das Programm vor ~10 ms erstellt, ob sich dort ein Ordner befindet?
    Macht nicht besonders viel sinn.
    Also wenn ein Ordner nicht vorhanden ist, muss du nichtmehr prüfen, da dann ein Ordner erstellt wird und dieser ist natürlich leer
    Bei dir prüft er dann aber trotzdem weiter, ausserdem verbindet man Pfade mit Path.combine()
    @optz:: WEs ist nicht nötig, einen Pfad zu testen, um ihn bei Nicht-Existenz zu erstellen.
    @iphone747:: Es gibt 2 Methoden, einen Pfad zu erstellen: Lokal und Global.
    1. IO.Directory.CreateDirectory("Temp")
    2. IO.Directory.CreateDirectory("c:\Temp\Temp\Temp\Temp\Temp\Temp\Temp\Temp")
    Wenn der Pfad nicht da ist, wird er erzeugt, auch wenn dazu mehrere "Zwischen"-Verzeichnisse erstellt werden müssen.
    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!
    Wow danke für die schnelle Hilfe das is ja Wahnsinn!

    Ich wahr mal so frei und habe eure Codes direkt ausprobiert.
    Allerdings funktioniert keiner so richtig, wobei der fehler bestimmt vor meinem Bildschrifm sitzt :D

    - Den Code von RushDen bekomme ich leider gar nicht zum laufen hier tauchen 5 fehlermeldungen auf (siehe Bildanhang)

    - bei optz bekomme ich in Zeile 8 eine Fehlermeldung "end of- Anweisung erwartet", allerdings weiß ich nicht wo diese fehlen sollte.
    ps: die "YYYY" müssen klein geschrieben werden "yyyy" damit das Datum ausgegeben wird.

    naja zumindes weiß ich das mein Ansatz ziemlich in leere ging um die Aufgabe zu bewerkstelligen!
    Bilder
    • vb ordner.PNG

      72,07 kB, 1.154×718, 171 mal angesehen

    VB.NET-Quellcode

    1. If System.IO.Directory.Exists("C:\Users\Username\Desktop\Arbeit\2013" & TextBox1.Text) = True Then


    Schau Dir diese Zeile an. Da hast Du einen groben Denkfehler. Das führt sich im weiteren Code noch fort. Den Rest, siehe oben.