Entwickler-Ecke
WinForms - SelectedPath Rückgabewert mit/ohne Backslash
Sharp_Schorsch - Mi 03.12.08 14:18
Titel: SelectedPath Rückgabewert mit/ohne Backslash
Hallo zusammen,
Beim Rückgabewert der Methode FolderBrowserDialog.SelectedPath() wird am Ende des Strings ein Backslash ("\") mit angegeben, wenn ich ein Laufwerk (z.B. "C:") auswähle. Der Backslash wird weggelassen, wenn es sich bei der Wahl um einen Unterordner handelt. Wenn ich daraufhin mit dem ermittelten Pfad und entsprechender Methode "string[] Files = System.IO.Directory.GetFile(SelectedFolder)" die Files in einer string-Liste speichere und diese in einer Textbox ausgebe, erscheint vor dem Dateinamen dieser Backslash (wenn er nicht Teil des Folder-Strings ist); bzw erscheint nicht (wenn er zum Folder-String gehört).
Nochmal zur Verdeutlichung:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| void MyMethod(void) { ... folderBrowserDialog1.ShowDialog(); SelectedFolder = folderBrowserDialog1.SelectedPath; ... string[] Files = System.IO.Directory.GetFile(SelectedFolder); ... } |
Ergebnis:
Fall A:
-------
SelectedFolder == "C:\"
Files[]={
"test1.txt",
"test2.txt",
...
Fall B:
-------
SelectedFolder == "C:\Test"
Files[]={
"\subtest1.txt",
"\subtest2.txt",
...
Kann sein, daß das Thema bereits tausendfach diskutiert wurde, ich habe dazu aber nichts gefunden.
Kann ich ohne Stringmanipulationen des Verzeichnisnamens und der Dateinamen irgendetwas machen, um eine einheitliche Darstellungsweise zu bekommen, unabhängig davon, ob ich ein Laufwerk oder ein Unterverzeichnis aufrufe ?
Moderiert von
Kha: C#-Tags hinzugefügt
bakachan - Mi 03.12.08 14:40
1. GetFiles und nicht GetFile
2. bei mir stehen in dem String-array die kompletten Dateipfade also weiss ich ehrlich gesagt nicht wie du zu deinem Problem kommst
JüTho - Mi 03.12.08 14:43
Hallo,
das kann so eigentlich nicht stimmen; Du hast vermutlich eine wesentliche Information vergessen.
Zunächst einmal heißt die Methode
GetFiles (bitte immer korrekt schreiben, damit z.B. die Suchfunktion greifen kann und spätere Leser richtig suchen, finden und übernehmen können).
Diese Methode sollte immer den vollständigen Dateinamen (einschl. vollem Pfad) zurückgeben:
| SDK-Doku/MSDN hat folgendes geschrieben: |
Directory.GetFiles-Methode (String)
Rückgabewert: Ein String-Array von Dateinamen im angegebenen Verzeichnis. Dateinamen enthalten den vollständigen Pfad. |
Du musst also auf jeden Fall jeden Dateinamen im String-Array zusätzlich bearbeiten, z.B. mit
Path.GetFileName.
Jürgen
Wieder eine Antwort übersehen, die etwas schneller war. :mrgreen:
Sharp_Schorsch - Mi 03.12.08 14:50
1) Sorry, das 's' von "GetFiles()" ist beim Editieren abhanden gekommen.
2) OK, war mein Fehler, es zu erwähnen: Ich lösche den Substring des Pfades vorher mit folgender Methode, um den nackten Dateinamen zu erhalten:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| private List<string> CutPath(List<string> list2cut,string cutpath) { List<String> list2return = new List<string>(); foreach (string f in list2cut) { list2return.Add(f.Substring(cutpath.Length, (f.Length - cutpath.Length))); } return list2return; } |
Dennoch bekomme ich unterschiedliche Ergebnisse für C: bzw Unterordner.
Moderiert von
Kha: C#-Tags hinzugefügt
bakachan - Mi 03.12.08 14:54
Wie Jürgen schon erwähnt hat bietet sich dafür eigentlich
System.IO.Path.GetFileName(fileName);
an.
Das gibt dir den Dateinamen zurück
jaenicke - Mi 03.12.08 14:54
Sharp_Schorsch hat folgendes geschrieben : |
| Kann ich ohne Stringmanipulationen des Verzeichnisnamens und der Dateinamen irgendetwas machen, um eine einheitliche Darstellungsweise zu bekommen, unabhängig davon, ob ich ein Laufwerk oder ein Unterverzeichnis aufrufe ? |
Sharp_Schorsch hat folgendes geschrieben : |
| list2return.Add(f.Substring(cutpath.Length, (f.Length - cutpath.Length))); |
*räusper*
Die passende Methode um den Dateinamen aus dem kompletten Pfad zu erhalten wurde ja eben genannt:
http://msdn.microsoft.com/en-us/library/system.io.path.getfilename.aspx
Sharp_Schorsch - Mi 03.12.08 15:04
OK, der Hinweis , dass ich den jeweiligen Dateinamen mit "Path.GetFileName" nochmal explizit bearbeite, war entscheidend.
Danke !
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!