FolderBrowserDialog einbinden & Resourcen aufzählen

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Niko Ortner.

    FolderBrowserDialog einbinden & Resourcen aufzählen

    Hallo,
    Ich habe 2 Fragen.

    1. Wie man auf dem Bild sehen kann hab ich im Code ganz normal den Pfad angegeben, wie kann ich dies weglassen und den FolderBrowserDialog einbinden.

    2. Ist es möglich mehrere Resourcen aufzulisten, die dann eingefügt werden sollen? Ich habe es so gemacht, was aber nicht funktioniert..
    "My.Resources.testdatei & My.Resources.testdatei2" Wenn der Patcher fertig ist soll er über 50 Dateien in den gewählten Pfad/Ordner einfügen.
    Gibt es da einen einfacheren Weg?

    So hab ich mir das vorgestellt, wie es funktionieren soll.
    1 - Pfad wählen
    2 - Der Patcher löscht den gewählten Ordner+Inhalt
    3 - Der Ordner wird wieder neu erstellt
    4 - Die neuen Dateien werden eingefügt


    Code:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. FolderBrowserDialog1.ShowDialog()
    3. Me.TextBox1.Text = FolderBrowserDialog1.SelectedPath
    4. End Sub
    5. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    6. System.IO.Directory.Delete("C:\Test\", True)
    7. System.IO.Directory.CreateDirectory("C:\Test\")
    8. My.Computer.FileSystem.WriteAllBytes("C:\Test\", My.Resources.testdatei1 & My.Resources.testdatei2, True)
    9. Me.Close()
    10. End Sub
    Sieh dir mal an, was "WriteAllBytes" als Parameter erwartet: einen Dateinamen. Du gibst ihm einen Pfad.
    Etwas das Gleiche, wenn du dem Briefträger statt der genauen Adresse nur die Straße gibst. Resultat ist eine UnauthorizedAccessException.
    Bin Anfänger^^ weiß also noch nicht was alles genau bedeutet..
    Hab "WriteAllBytes" mit "MoveFile" ersetzt:

    VB.NET-Quellcode

    1. My.Computer.FileSystem.MoveFile(FolderBrowserDialog1.SelectedPath, My.Resources.testdatei, True)

    nun kommt aber bei My.Resources.testdatei ein Fehler: Der Wert vom Typ "1-dimensionales Arrey von Byte" kann nicht in "String" konvertiert werden.
    Was genau bedeutet das, und wie kann ich das sonst lösen?

    VB.NET-Quellcode

    1. System.IO.Directory.Delete("C:\Test\", True)
    2. System.IO.Directory.CreateDirectory("C:\Test\")
    3. My.Computer.FileSystem.WriteAllBytes("C:\Test\testdatei1", My.Resources.testdatei1, True)

    squisheemixxa schrieb:

    du musst ihm nur einen pfad zu einer datei übergeben, nicht nur den pfad zu einem verzeichnis.
    So war es ja bei meinem alten Code und hat auch funktioniert, aber ich wollte ja die FolderBrowser Funktion einbauen.
    Nun sieht das ganze ja aber so aus.
    My
    .Computer.FileSystem.WriteAllBytes(FolderBrowserDialog1.SelectedPath, My.Resources.testdatei, True)
    Wie kann ich nun den Pfad der Datei übergeben?
    Danke, funktioniert jetzt alles :)
    Jetzt muss nur noch das letze Problemchen gelöst werden. :D

    2. Ist es möglich mehrere Resourcen aufzulisten, die dann eingefügt werden sollen? Ich habe es so gemacht, was aber nicht funktioniert..
    "My.Resources.testdatei & My.Resources.testdatei2" Wenn der Patcher fertig ist soll er über 50 Dateien in den gewählten Pfad/Ordner einfügen.
    Gibt es da einen einfacheren Weg?

    squisheemixxa, wie du schon gesagt hast geht das nicht.
    Wie könnte ich das aber lösen?
    Alle Ressourcen einzeln speichern.

    VB.NET-Quellcode

    1. My.Computer.FileSystem.WriteAllBytes("C:\Test\testdatei1.txt", My.Resources.testdatei1, True)
    2. My.Computer.FileSystem.WriteAllBytes("C:\Test\testdatei2.txt", My.Resources.testdatei2, True)
    3. My.Computer.FileSystem.WriteAllBytes("C:\Test\testdatei3.txt", My.Resources.testdatei3, True)
    4. '...


    Allerdings frage ich mich von welchem Typ My.Resources.Testdatei1 ist dass WriteAllBytes funktioniert.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    Niko Ortner schrieb:

    Alle Ressourcen einzeln speichern.

    VB.NET-Quellcode

    1. My.Computer.FileSystem.WriteAllBytes("C:\Test\testdatei1.txt", My.Resources.testdatei1, True)
    2. My.Computer.FileSystem.WriteAllBytes("C:\Test\testdatei2.txt", My.Resources.testdatei2, True)
    3. My.Computer.FileSystem.WriteAllBytes("C:\Test\testdatei3.txt", My.Resources.testdatei3, True)
    4. '...


    Allerdings frage ich mich von welchem Typ My.Resources.Testdatei1 ist dass WriteAllBytes funktioniert.
    Oh man^^ da braucht man ja garnicht denken, wieso bin ich nich selber drauf gekommen.. :)

    Mit .txt Dateien geht es glaub ich nicht, da diese zu klein sind oder so.
    Ich habe hier .Lnd und .Res dateien und es klappt.

    Vielen Dank an alle
    Alles erledigt, kann geclosed werden. :)

    _______________________________________________________________________________


    Hier nochmal der komplette Code falls jemand etwas änliches basteln möchte und das hier dann findet...

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. FolderBrowserDialog1.ShowDialog()
    3. Me.TextBox1.Text = FolderBrowserDialog1.SelectedPath
    4. End Sub
    5. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    6. System.IO.Directory.Delete(FolderBrowserDialog1.SelectedPath, True)
    7. System.IO.Directory.CreateDirectory(FolderBrowserDialog1.SelectedPath)
    8. My.Computer.FileSystem.WriteAllBytes("C:\Test\testdatei1.txt", My.Resources.testdatei1, True)
    9. My.Computer.FileSystem.WriteAllBytes("C:\Test\testdatei2.txt", My.Resources.testdatei2, True)
    10. My.Computer.FileSystem.WriteAllBytes("C:\Test\testdatei3.txt", My.Resources.testdatei3, True)
    11. '...
    12. End Sub
    13. End Class
    Ok. Wenn schon, dann sauber(er):

    VB.NET-Quellcode

    1. Private Sub Button1_Click() Handles Button1.Click
    2. Using FBD As New FolderBrowserDialog
    3. If FBD.ShowDialog = DialogResult.OK Then
    4. TextBox1.Text = FBD.SelectedPath
    5. Button2.Enabled = True
    6. End If
    7. End Using
    8. End Sub
    9. Private Sub Button2_Click() Handles Button2.Click
    10. 'Das Ganze setzt voraus, dass in der TextBox immer ein gültiger Pfad steht.
    11. 'Da aber wohl niemand manuell den Pfad eingibt, wenn er ihn auch suchen kann
    12. 'sollte die ReadOnly Eigenschaft auf True gesetzt sein.
    13. 'Weiters wird vorausgesetzt, dass der Button2 erst anklickbar ist, wenn ein Pfad ausgewählt wurde.
    14. If IO.Directory.Exists(TextBox1.Text) Then
    15. System.IO.Directory.Delete(TextBox1.Text, True)
    16. End If
    17. System.IO.Directory.CreateDirectory(TextBox1.Text)
    18. 'Bei WriteAllBytes ist mir ja sowiso nicht klar, wie ein String in ein Byte-Array umgewandelt werden kann (Option Strict Off?)
    19. IO.File.WriteAllText(IO.Path.Combine(TextBox1.Text, "TestDatei1"), My.Resources.TextFile1)
    20. IO.File.WriteAllText(IO.Path.Combine(TextBox1.Text, "TestDatei2"), My.Resources.TextFile2) 'Man kann die Ressourcen auch ohne My-Namespace auslesen, was im Falle der Nummerierung hier mit einer For Schleife gelöst werden kann -> Code wird kürzer.
    21. '...
    22. End Sub
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils