Dateien auf der Festplatte suchen

Hi,
ich bins nochmal, also ich wollte grade versuchen, dass er verschiedene Dateitypen sucht, z.B.: ".exe"-Dateien.
Dazu hab ich mir eine Funktion geschrieben die den Dateinamen zerlegt und dann prüft ob die Dateiendung der Vorgabe entspricht, in diesem Fall wird geprüft ob es sich um eine ".exe" - Datei handelt. Wenn ich das Programm laufen lasse gibt es ab einen bestimmten Zeitpunkt einen Fehler im Dos-Fenster:

This application has requested the Runtime to terminate it in an unusual way. [...]

Hier die Stringfunktion:

Code:
bool string_vergleich(char nam[256], char verg[256])//nam=Dateiname ; verg=wort mit dem verglichen werden soll (".exe")
{
     
     string s="";
     int n;
s=nam;
     n=s.find('.',0);
     
     s=s.substr(n);
     if(strcasecmp(verg,s.c_str())==0)
     return true;
     else
     return false;

 }

Ich bin mir ganz sicher, dass der Fehler in dieser Funktion liegt, da mein Prog funktionoiert, wenn ich die Funktoion weglasse.

Danke nochmal vielmals für eure Hilfe.

Gruß
cesupa
 
Ja, da ist ein Fehler in der Funktion. Überleg dir mal was passiert, wenn in dem Dateinamen gar kein Punkt drin ist, also wenn die Datei keine Endung hat?! Du solltest also erstmal prüfen ob du überhaupt einen Punkt gefunden hast, bevor du den Substring erstellen willst.

Dann solltest du lieber rfind statt find nehmen, da ein Dateiname auch mehrere Punkte enthalten könnte und die Endung ja der Teil ist, der hinter dem letzten Punkt kommt.

(statt die C-Strings in C++ strings umzuwandeln und dann rfind zu nehmen hättest du auch gleich die Funktion strrchr für C-Strings nehmen können - nur so nebenbei :))

Vielleicht noch eine kleine Verbesserung: du hast da eine if-Anweisung und wenn die Bedingung in dieser Anweisung true ist, gibst du true zurück, wenn die Bedingung false ist, gibst du false zurück. Merkst du was? Du könntest doch auch gleich den Wert der Bedingung zurückgeben, so ist es irgendwie doppel gemoppelt (obwohl dein Compiler das vermutlich eh weg-optimiert).
Code:
return (strcasecmp (verg,s.c_str())==0);
 
Zurück