2010-12-07 11 views
0

Ich muss überprüfen, ob eine Datei im Format *recipient in einem Verzeichnis existiert und ob sie ihren Namen bekommt. Ich versuchte mit opendir() und readdir(), um jede einzelne Datei in einem Verzeichnis aufzulisten und zu vergleichen, aber in Fällen, in denen es viele Dateien gibt, ist dies zeitaufwendig.Überprüfen Sie, ob eine Datei in einem Verzeichnis mit nur einem Teilnamen existiert

Gibt es einen besseren Weg, dies zu erreichen? Wenn ja, haben Sie einen kleinen Ausschnitt, der zeigt, wie das geht?

Vielen Dank, Code ist willkommen.

EDIT:

Einfach mehr klar zu sein, ich brauche ein Verzeichnis für jede Datei zu überprüfen, die in recipient endet oder sonst *recipient setzen, wenn ich ls verwenden war, wenn eine Datei mit diesem Namen dann existiert ich brauche um seinen Namen zu bekommen.

Antwort

2

Die Routine glob macht genau das, was Sie suchen. Anwendungsbeispiele sind hier verfügbar:

http://www.opengroup.org/onlinepubs/009695399/functions/glob.html

Hier ist ein vollständiges Beispiel, das Sie erhalten sollten, was Sie brauchen:

#include <glob.h> 
#include <stdio.h> 

int main(int argc, char **argv) 
{ 
    glob_t globbuf; 

    glob("*recipient", 0, NULL, &globbuf); 

    if (globbuf.gl_pathc == 0) 
     printf("there were no matching files\n"); 
    else 
     printf("the first of the matching files is: %s\n", globbuf.gl_pathv[0]); 

    globfree(&globbuf); 

    return 0; 
} 
+0

Danke. Siehe meinen vorherigen Kommentar. –

+0

Danke. Ich schätze es das Beispiel. –

2

Sie wollen glob(3) für diese.

+0

Danke, es das scheint die richtige Richtung zu sein, aber wie bekomme ich die Dateiname oder auch wenn es existiert? In allen Beispielen finde ich, dass viele verschiedene Strings gesetzt werden und letztendlich 'ls' aufgerufen wird oder ein anderes Dienstprogramm. –

+1

Es sollte angemerkt werden, dass "glob" nichts tut, um die inhärente Langsamkeit dieses Ansatzes zu lösen. Intern wird nur 'readdir' wiederholt. –

+0

@Mr: 'ls' wird aufgerufen, um jedes der Ergebnisse anzuzeigen, aber' glob() 'macht immer noch die Arbeit. –

Verwandte Themen