Verzeichnise in Listbox anzeigen (Fehler)

ZeroOne2055

Grünschnabel
Hi!
Ich will ein paar Verzeichnisse in eine ListBox laden.

Code:
TSearchRec sr;
ListBox1->Clear();
        if (FindFirst("Mods\\*", faDirectory, sr) == 0)
         do ListBox1->Items->Add(sr.Name);
          while (FindNext(sr) == 0);
           FindClose(sr);

Allerdings wird das ganze so angezeigt:

.
..
Verzeichnis1
Verzeichnis2
Verzeichnis3

Wie kriege ich die Punkte über dem Suchergebniss weg?
 
Kleine Erklärung dazu:
Der einzelne Punkt symbolisiert das Verzeichnis selber (ist also auch ein Verzeichnis, das auf sich selber verweist), die zwei Punkte symbolisieren das übergeordnete Verzeichnis (wie bei dem Shellkommando 'cd..', das ins übergeordnete Verzeichnis wechselt)
 
Einfach vor dem Hinzufügen zur Liste überprüfen, ob sr.Name "." oder ".." ist und ggf. den nächsten Schleifendurchlauf starten.

Und wie stelle ich das an?

Nachtrag: Und ausserdem Zeigt er auch alle Dateien an obwohl er nur Verzeichnisse auflisten soll. Kann ich das irgendwie unterbinden?
 
Zuletzt bearbeitet:
Code:
if(strcmp(sr.Name, ".") == 0) //Strings sind identisch wenn strcmp '0' zurückgibt
 
Noch'n kleiner Tip:
Schau Dir mal die Funktionen 'int CListBox::Dir( UINT attr, LPCTSTR lpszWildCard );' und 'int CWnd::DlgDirList( LPTSTR lpPathSpec, int nIDListBox, int nIDStaticPath, UINT nFileType );' an.
P.S.: Die Funktionen heißen 'Dir' und 'DlgDirList'
 
Es gibt doch bestimmt eine Möglichkeit, diesen AnsiString in einen char* umzuwandeln. Da ich kein Borland installiert habe und es schon eine Weile her ist, daß ich das letzte Mal damit gearbeitet habe, weiß ich nicht, wie das da geht. Beim CString von MFC gibt es das CString::LockBuffer(), beim string von STL gibt es das string::c_str(). Einer von den Borland-Usern hier sollte Dir da aber weiterhelfen können, wenn es die Hilfe nicht tut. Außerdem hat dieser AnsiString bestimmt selber eine Vergleichsfunktion. Evtl. geht
Code:
sr.Name == AnsiString(".")
oder direkt
Code:
sr.Name == "."
 
Das müsste dann so aussehen:
Code:
TSearchRec sr;
 ListBox1->Clear();
  if (FindFirst("Mods\\*", faDirectory, sr) == 0)
   do ListBox1->Items->Add(sr.Name);
  while (FindNext(sr) == 0);
FindClose(sr);
//------Test um den Punkt auszuschliessen------\\
if (strcmp (sr.Name.c_str(), ".") == 0)
ShowMessage("Gefunden");
else (ShowMessage("Nicht Gefunden"));
Allerdings findet er den Punkt im Suchergebnis nicht.
 
Zuletzt bearbeitet:
Zurück