Benutzer mit den meisten Antworten
Speicherpfad für eine Visual Basic 2010 Applikation vom Benutzer wählen lassen

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
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/- Als Antwort markiert Thorsten DörflerModerator Samstag, 31. Juli 2010 16:08
-
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 FolderBrowserDialogFBD.ShowNewFolderButton = True
If FBD.ShowDialog = Windows.Forms.DialogResult.OK Then
PathName = FBD.SelectedPathFullPathName = IO.Path.Combine(PathName, FileName)
MsgBox(FullPathName, MsgBoxStyle.Information)Else
MsgBox("FolderBrowserDialog abgebrochen", MsgBoxStyle.Exclamation)
End IfGruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)- Als Antwort markiert Thorsten DörflerModerator Samstag, 31. Juli 2010 16:09
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/- Als Antwort markiert Thorsten DörflerModerator Samstag, 31. Juli 2010 16:08
-
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/ -
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 -
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/ -
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 FolderBrowserDialogFBD.ShowNewFolderButton = True
If FBD.ShowDialog = Windows.Forms.DialogResult.OK Then
PathName = FBD.SelectedPath
FullPathName = PathName & Separator & FileNameMsgBox(FullPathName, MsgBoxStyle.Information)
Else
MsgBox("FolderBrowserDialog abgebrochen", MsgBoxStyle.Exclamation)
End IfGruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen) -
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 FolderBrowserDialogFBD.ShowNewFolderButton = True
If FBD.ShowDialog = Windows.Forms.DialogResult.OK Then
PathName = FBD.SelectedPathFullPathName = IO.Path.Combine(PathName, FileName)
MsgBox(FullPathName, MsgBoxStyle.Information)Else
MsgBox("FolderBrowserDialog abgebrochen", MsgBoxStyle.Exclamation)
End IfGruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)- Als Antwort markiert Thorsten DörflerModerator Samstag, 31. Juli 2010 16:09