PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nur Librarys asu dem Verzeichnis auflisten



xmarvel
22-06-2004, 16:52
Für mein Plugin System brauch ich die Dateinamen des Plugin Verzeichnisses.
Folgender kleiner Code:

void CPluginLoader::readDir(std::string dirname)
{
DIR* dir = opendir(dirname.c_str());
if (dir == NULL) cout << "Verzeichnis nicht gefunden !" << endl;

struct dirent* file;
while ( ( file = readdir(dir) ) != NULL )
cout << file->d_name << endl;
}

Nur jetzt soll er mir nur die libs (*.so) ausgeben wie kann ich nur diese ausgegeben lassen?

MFG
xmarvel

Stanislaus
22-06-2004, 17:08
Moin, moin!

Guck einfach, ob die letzten 3 Zeichen des filenames ".so" sind.


while ( ( file = readdir(dir) ) != NULL )
{
if((file->d_name.substr(strlen(file->d_name) - 3, 3)) == ".so")
cout << file->d_name << endl;
}

(Ich gehe davon aus, daß d_name ein std::string ist)

Bis neulich ...

xmarvel
22-06-2004, 17:15
ne ist es leider nicht ist ein char*

Stanislaus
22-06-2004, 17:33
Naja dann pack den char* halt in einen string oder guck einfach was Dir string.h alles schönes mitbringt. z.B. "strchr", "strstr", "strncpy" oder oder ...
Die letzten drei Zeichen eines char*s bekommst Du auf tausende Arten raus.

Bis neulich ...

xmarvel
23-06-2004, 09:45
nur zur Vollständigkeitshalbar hier die Lösung.

if (strstr(file->d_name, ".so"))

MFG
xmarvel

BLUESCREEN3D
23-06-2004, 18:17
nur zur Vollständigkeitshalbar hier die Lösung.

if (strstr(file->d_name, ".so"))
das ist leider eine verbuggte lösung.
strstr findet teilstrings (man strstr) - also würde eine datei namens "bla.so.blubb" auch erkannt werden, da sie ein ".so" enthält.

lösung:

if (strlen(file->d_name)>2)
{
if (strcmp(file->d_name+strlen(file->d_name)-3,".so")==0)
{
//irgendwas tolles machen
}
}

edit: die abfrage der länge ist nötig, weil durch das "-3" sonst bei zu kurzen dateinamen auf einen speicherbereich vor dem namen zugegriffen werden könnte.