2010-12-07 10 views
0

ディレクトリに*recipientという形式のファイルが存在するかどうか、またファイル名を取得する必要があるかどうかを確認する必要があります。私はopendir()readdir()を使ってディレクトリの各ファイルをリストアップして比較しようとしましたが、ファイルがたくさんある場合には時間がかかります。部分的な名前のディレクトリにファイルがあるかどうか確認してください

これを実現する方法はありますか?はいの場合は、これを行う方法を示すスニペットがありますか?

ありがとう、コードありがとうございます。

EDIT:

その名前のファイルが、私は必要な存在する場合にだけ、より明確にするために、私は、私はlsを使用した場合*recipientを置くrecipientまたはその他で終わるすべてのファイルのディレクトリをチェックする必要がありますその名前を得る。

答えて

2

ルーチンglobはあなたが探しているものだけです。使用例はこちらをご利用いただけます:

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

ここにあなたが必要なものを取得する必要があり、完全な例です:

#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

ありがとうございます。私の前のコメントを見てください。 –

+0

ありがとうございます。私はその例に感謝します。 –

2

この場合、glob(3)が必要です。

+0

おかげで、正しい方向のようです、しかしどのように私は入手できますかファイル名、またはそれが存在する場合でも?すべての例で私はたくさんの異なる文字列が設定されていて、最終的には 'ls'が呼び出されているか、または他のユーティリティであることがわかります。 –

+1

「glob」は、このアプローチの本質的な遅さを解決するものではないことに注意してください。内部的には 'readdir'でループします。 –

+0

@Mr: 'ls'はそれぞれの結果を順番に表示するために呼び出されますが、' glob() 'はまだ処理を続けています。 –

関連する問題