none
Speicherpfad für eine Visual Basic 2010 Applikation vom Benutzer wählen lassen RRS feed

  • Frage

  • Hi Leute,

    ich will den Benutzer meiner Software den Speicherpfad für anfallende Daten wählen lassen. Mein Code dazu sieht folgendermaßen aus:

      'Verzeichniswahl
      Private Sub cmdSaveFileDialog_Click(
            ByVal sender As System.Object,
            ByVal e As System.EventArgs
            ) Handles cmdVerzeichnis.Click
        Dim AppShell As Object
        Dim BrowseDir As Object
    
        AppShell = CreateObject("Shell.Application")
        BrowseDir = AppShell.BrowseForFolder(0, "Ordner auswählen", &H1000, 17)
        On Error Resume Next
        Pfad = BrowseDir.items().Item().Path
        If Pfad = "" Then Exit Sub
        MsgBox(Pfad)
      End Sub
    

    Etwas später will ich die Variable Pfad zur Speicherung folgendermaßen verwenden:

    'Speicherung mit Datum/Uhrzeit als .txt
        Dim oFi As FileStream = New FileStream(Pfad &
                            Now.ToString.Replace(CChar(":"), CChar(" ")) &
                            ".csv", FileMode.Create)
        Dim oStw As StreamWriter = New StreamWriter(oFi)
    
        For x As Integer = 0 To lstTab1.Items.Count - 1
    
          oStw.WriteLine(lstTab1.Items.Item(x).ToString)
    
        Next
    
        oStw.Close()
    

    Das Problem ist, dass nicht das Ausgewählte Verzeichnis verwendet wird, sondern das darüberliegende. Das gewählte Verzeichnis wird dafür an den Dateinamen vorne angehängt.

    Bsp.:

    1. User wählt Verzeichnis C:\Daten\test

    2. Programm soll Datei mit dem Namen 29.07.2010 10 56 16.csv in C:\Daten\test speichern

    Derzeit speichert das Programm die Datei mit dem Namen test29.07.2010 10 56 16.csv in C:\Daten. Kann mir jemand sagen, was ich da falsch mache?

    Vielen Dank für eure Hilfe!

    VBDave

    Donnerstag, 29. Juli 2010 08:59

Antworten

  • Hi VBDave,

    ändere die Zeile:

    Pfad = BrowseDir.items().Item().Path
    
    ' in
    Pfad = BrowseDir.items().Item().Path & "\"
    

    Anstatt Deinem BrowseDir Object könntest Du Dir auch mal das FolderBrowserDialog Control anschauen.

     


    Hannes

    If you have got questions about this, just ask.
    Mark the thread as answered if the answer helps you. This helps others who have the same problem !
    C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/
    Donnerstag, 29. Juli 2010 09:17
  • Hallo Nochmal,

    Thorsten hat schon darauf hingewiesen, dass Pfad und
    Dateiname per IO.Path.Combine() erstellt werden sollte,
    damit FullPathName auch bei einer Pfadauswahl wie "C:\"
    richtig erstellt wird. Das würde dann so aussehen:

            Dim FileName As String = "DeinDateiName.csv"
            Dim PathName As String    ' Pfad ohne Dateiname
            Dim FullPathName As String    ' Pfad + Dateiname
            Dim FBD As New FolderBrowserDialog

            FBD.ShowNewFolderButton = True
            If FBD.ShowDialog = Windows.Forms.DialogResult.OK Then
                PathName = FBD.SelectedPath

                FullPathName = IO.Path.Combine(PathName, FileName)
                MsgBox(FullPathName, MsgBoxStyle.Information)

            Else
                MsgBox("FolderBrowserDialog abgebrochen", MsgBoxStyle.Exclamation)
            End If

    Gruß aus St.Georgen
    Peter Götz
    www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

    Donnerstag, 29. Juli 2010 11:44

Alle Antworten

  • Hi VBDave,

    ändere die Zeile:

    Pfad = BrowseDir.items().Item().Path
    
    ' in
    Pfad = BrowseDir.items().Item().Path & "\"
    

    Anstatt Deinem BrowseDir Object könntest Du Dir auch mal das FolderBrowserDialog Control anschauen.

     


    Hannes

    If you have got questions about this, just ask.
    Mark the thread as answered if the answer helps you. This helps others who have the same problem !
    C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/
    Donnerstag, 29. Juli 2010 09:17
  • Super!

    Danke! Was genau bewirkt der Backslash?

    Donnerstag, 29. Juli 2010 09:36
  • Der Backslash ist das Seperatorzeichen( und auch Abschlusszeichen) von Verzeichnissen.

    PfadVariable="C:\test1\test2" & Dateiname="Datei.txt" => Datei test2Datei.txt wird in Verzeichnis C:\test1\ geschrieben

    PfadVariable="C:\test1\test2\" & Dateiname="Datei.txt" => Datei Datei.txt wird in Verzeichnis C:\test1\test2\ geschrieben


    Hannes

    If you have got questions about this, just ask.
    Mark the thread as answered if the answer helps you. This helps others who have the same problem !
    C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/
    Donnerstag, 29. Juli 2010 10:57
  • Hallo,

    ' in
    Pfad = BrowseDir.items().Item().Path & "\"
     

    IMO sollte man hier besser mit Path.Combine arbeiten, statt sich die Pfad und Dateinamen selber zusammenzubasteln. Wenn hier "C:\" als Pfad ausgewählt wird, bekommt man "C:\\" als Ergebnis, was nicht funktioniert.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de
    Donnerstag, 29. Juli 2010 11:27
    Moderator
  • Ja, da hast Du natürlich Recht.

     

    'Visual Basic 2008 - .net 3.5 - Any CPU
        Dim Pfad As String = "C:\test1\test2\"
        Dim Datei As String = "Datei.txt"
        Dim DateinameMitPfad As String = System.IO.Path.Combine(Pfad, Datei)
    

     


    Hannes

    If you have got questions about this, just ask.
    Mark the thread as answered if the answer helps you. This helps others who have the same problem !
    C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/
    Donnerstag, 29. Juli 2010 11:33
  • Hallo,

    <VBDave> schrieb im Newsbeitrag news:59647785-8a36-4f8b-b3f9-903b56786943@communitybridge.codeplex.com...

    Hi Leute,

    ich will den Benutzer meiner Software den Speicherpfad für anfallende Daten wählen lassen. Mein Code dazu sieht folgendermaßen aus:


    'Verzeichniswahl Private Sub cmdSaveFileDialog_Click( ByVal sender As System.Object, ByVal e As System.EventArgs ) Handles cmdVerzeichnis.Click Dim AppShell As Object Dim BrowseDir As Object AppShell = CreateObject("Shell.Application") BrowseDir = AppShell.BrowseForFolder(0, "Ordner auswählen", &H1000, 17)

    Den BrowseForFolder Dialog kannst Du in VB.net einfacher und direkt als FolderBrowserDialog-Objekt haben.

    On Error Resume Next Pfad = BrowseDir.items().Item().Path If Pfad = "" Then Exit Sub MsgBox(Pfad) End Sub

    Etwas später will ich die Variable Pfad zur Speicherung folgendermaßen verwenden:
    [code]

    'Speicherung mit Datum/Uhrzeit als .txt
       Dim oFi As FileStream = New FileStream(Pfad &
                           Now.ToString.Replace(CChar(":"), CChar(" ")) &
                           ".csv", FileMode.Create)

    Du verkettest Deinen Pfad direkt mit dem Dateiname ohne
    dazwischen das Verzeichnistrennzeichen "\" dazwischen zu
    setzen.

    ... schnipp...

    Das Problem ist, dass nicht das Ausgewählte Verzeichnis verwendet
    wird, sondern das darüberliegende. Das gewählte Verzeichnis wird
    dafür an den Dateinamen vorne angehängt.

    s.oben:
    Das Verzeichnistrennzeichen (DirectorySeparatorChar) "\" zwischen
    Pfad und Dateiname fehlt bei Deinem Code.

    So bekommst Du Deine gewünschte Pfadangabe inkl. Dateiname:

            Dim Separator As String = IO.Path.DirectorySeparatorChar
            Dim FileName As String = "DeinDateiName.csv"
            Dim PathName As String    ' Pfad ohne Dateiname
            Dim FullPathName As String    ' Pfad + Dateiname
            Dim FBD As New FolderBrowserDialog

            FBD.ShowNewFolderButton = True
            If FBD.ShowDialog = Windows.Forms.DialogResult.OK Then
                PathName = FBD.SelectedPath
                FullPathName = PathName & Separator & FileName

                MsgBox(FullPathName, MsgBoxStyle.Information)

            Else
                MsgBox("FolderBrowserDialog abgebrochen", MsgBoxStyle.Exclamation)
            End If

    Gruß aus St.Georgen
    Peter Götz
    www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

    Donnerstag, 29. Juli 2010 11:35
  • Hallo Nochmal,

    Thorsten hat schon darauf hingewiesen, dass Pfad und
    Dateiname per IO.Path.Combine() erstellt werden sollte,
    damit FullPathName auch bei einer Pfadauswahl wie "C:\"
    richtig erstellt wird. Das würde dann so aussehen:

            Dim FileName As String = "DeinDateiName.csv"
            Dim PathName As String    ' Pfad ohne Dateiname
            Dim FullPathName As String    ' Pfad + Dateiname
            Dim FBD As New FolderBrowserDialog

            FBD.ShowNewFolderButton = True
            If FBD.ShowDialog = Windows.Forms.DialogResult.OK Then
                PathName = FBD.SelectedPath

                FullPathName = IO.Path.Combine(PathName, FileName)
                MsgBox(FullPathName, MsgBoxStyle.Information)

            Else
                MsgBox("FolderBrowserDialog abgebrochen", MsgBoxStyle.Exclamation)
            End If

    Gruß aus St.Georgen
    Peter Götz
    www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

    Donnerstag, 29. Juli 2010 11:44