Autor Beitrag
Maffi
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 17.03.09 19:50 
Hallo Leute, bin neu hier im Forum, hoffe das macht nix :)

ich hab ein kleines Problem, und zwar, möchte ich gerne, alle Ordner ausgegeben habe, ohne Pfad. Momentan sieht das bei mir so aus:

string [] Maplist1 = Directory.GetFileSystemEntries(verarbeiten);

gibt es eine möglichkeit das ohne Pfad anzeigen zu lassen, ohne das Array auseinander zu nehmen?

lg
Manuel


Moderiert von user profile iconKha: Topic aus WinForms verschoben am Di 17.03.2009 um 19:21
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: Di 17.03.09 20:16 
Hallo Manuel und :welcome:

wenn Du nur Dateien haben willst, passt Directory.GetFiles besser; such die gewünschte Überladung aus.

Das Verzeichnis muss einzeln herausgeholt werden, z.B. mit Path.GetFileName. Das geht aber mit einer einfachen foreach-Schleife, in der jedes Array-Element durch den kürzeren String ersetzt wird. (Was soll das heißen: "das Array auseinandernehmen"?)

Gruß Jürgen
Maffi Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 17.03.09 21:21 
Hallo JüTho, danke für die schnelle antwort, wollte erst aus dem Array den ersten Datensatz nehmen, und den Pfad bis zum Ordnernamen löschen, also von hinten an rückwärts zählen bis zum ersten /

Ich muss leider die Ordner namen habe. ich versuch es mal danke.

gruß
Manuel
Maffi Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 18.03.09 10:48 
Habs jetzt so gelöst, da ich nur die Ordner namen brauche, wenns mal jemand braucht

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
     string[] Maplist1 = Directory.GetDirectories(auftrag);
            Array.Sort(Maplist1);                
            int arr_anz=Maplist1.Length;
            arr_anz=arr_anz-1;            
            for (int i=0;i<=arr_anz;i++) 
            {
            string neupfad = shortpfad(Maplist1[i]);
            listBox1.Items.Add(neupfad);
            test[i]=Maplist1[i];
            }


Lieben Gruß
Manuel
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 18.03.09 11:06 
Hallo Manuel,

ich bitte um Entschuldigung für das Missverständnis und damit den falschen Rat. Deine Formulierung "ohne Pfad" hatte mich auf die Idee gebracht, dass es sich um Dateinamen handeln würde.

Für Pfadnamen passt in der Tat Directory.GetDirectories.

Im Code-Ausschnitt hast du die Zwischenvariable arr_anz eingeführt. Die ist sinnvoll, weil sonst in der for-Schleife die Länge in jedem Durchlauf neu bestimmt werden müsste. (Ich nehme freilich an, das würde der Compiler durch Optimierung regeln.) Aber das ginge auch kürzer:
ausblenden C#-Quelltext
1:
2:
            int arr_anz = Maplist1.Length - 1;
            for (int i=0;i<=arr_anz;i++)

Da ich annehme, dass das test-Array nur zum Testen vorgesehen ist, kann dies auch entfallen; dann geht es mit foreach deutlich einfacher:
ausblenden C#-Quelltext
1:
2:
3:
foreach(string temp in Maplist1) {
    listBox1.Items.Add( shortpfad(temp) );
}

Hier fehlt der entscheidende Teil deiner eigenen Überlegung, nämlich wie shortpfad realisiert wird. Dazu kann ich auch auf String.LastIndexOf hinweisen.

Übrigens gehören Namen wie listBox1 oder Maplist1 verboten. Da weißt auch du nach spätestens 14 Tagen nicht mehr, wozu diese Variablen genutzt werden. Auch denglischen Mischmasch wie "shortpfad" finde ich schrecklich; besser ist es, nur englische Bezeichner zu verwenden (sonst produziert die IDE denglische Namen).

Gruß Jürgen
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4796
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 18.03.09 12:47 
Um nur die Verzeichnisnamen zu ermitteln, kann man auch die Klasse DirectoryInfo benutzen.
DirectoryInfo.GetDirectories() liefert ein DirectoryInfo-Array zurück und mittels DirectoryInfo.Name bekommt man den reinen Verzeichnisnamen (ohne Pfad) zurück:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
DirectoryInfo di = new DirectoryInfo(@"c:\");

DirectoryInfo[] dirinfos = di.GetDirectories();
foreach(DirectoryInfo info in dirinfos)
  string sName = info.Name; // info.FullName würde den vollen Pfad zurückliefern (wie bei Directory.GetDirectories)
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 18.03.09 13:46 
@Th69
Das ist ein guter Vorschlag! "Normalerweise" werden die Klassen File, Directory mit Get-Methoden benutzt, wenn man auf "einfachem" Weg eine Liste von Files, Directories haben will. Deshalb habe ich darauf beschränkt und bin nicht auf die Idee mit DirectoryInfo gekommen.

FileInfo, DirectoryInfo passen dann, wenn man zusätzliche Informationen haben will, die es über die File-/Directory-Methoden nicht gibt. (Beispiel: Das Datum einer Datei gibt es über File, die Größe aber nicht.) An dieser Stelle liefert DirectoryInfo die gewünschte Informationen über den "eigentlichen" Namen direkt ohne Umweg.

Jürgen