Autor Beitrag
Sharp_Schorsch
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mi 03.12.08 14:18 
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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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:


ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: 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


Zuletzt bearbeitet von bakachan am Mi 03.12.08 14:57, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
msdn.microsoft.com/e...ath.getfilename.aspx
Sharp_Schorsch Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mi 03.12.08 15:04 
OK, der Hinweis , dass ich den jeweiligen Dateinamen mit "Path.GetFileName" nochmal explizit bearbeite, war entscheidend.

Danke !