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 user profile iconKha: 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 user profile iconKha: 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

user profile iconSharp_Schorsch hat folgendes geschrieben Zum zitierten Posting springen:
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 ?

user profile iconSharp_Schorsch hat folgendes geschrieben Zum zitierten Posting springen:
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 !