Archiv verlassen und diese Seite im Standarddesign anzeigen : Nur Librarys asu dem Verzeichnis auflisten
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 ...
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 ...
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.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.