2009-04-06 11 views
0

どのようにしてコンピュータ上のファイルを検索しますか? 特定の拡張機能を探している可能性があります。WindowsのCでファイルを検索する

すべてのファイルを繰り返し処理し、ファイル名を調べる必要があります。

私は拡張子が.codeのファイルをすべて探したかったと言います。

+0

何を意味するのですか? –

答えて

1

FindFirstFile()またはFindNextFile()関数と再帰アルゴリズムを使用してサブフォルダを走査します。

3

Windowsの場合、FindFirstFile()FindNextFile()の機能を調べることをお勧めします。再帰的な検索を実装する場合は、GetFileAttributes()を使用してFILE_ATTRIBUTE_DIRECTORYをチェックできます。ファイルが実際にディレクトリの場合は、検索を続行します。

+0

FindFirst/NextFileはすでにファイルの属性を通知します。 GetFileAttributesを呼び出す必要はありません。 –

-1

FindFirstFile()/ FindNextFile()は、ディレクトリ内のファイルのリストを検索する際にジョブを実行します。サブディレクトリを再帰的に検索するには、パスをディレクトリとファイル名に分割し、その結果のディレクトリの詳細を使用して再帰的なディレクトリ検索を実行することがあります(_splitpath

)。あなたは "を解析" によって

1

FindFirstFileのための素晴らしいラッパーはWindows用のdirent.hである(dirent.hトニRonkkoグーグル)


#define S_ISREG(B) ((B)&_S_IFREG) 
#define S_ISDIR(B) ((B)&_S_IFDIR) 

static void 
scan_dir(DirScan *d, const char *adir, BOOL recurse_dir) 
{ 
    DIR *dirfile; 
    int adir_len = strlen(adir); 

    if ((dirfile = opendir(adir)) != NULL) { 
     struct dirent *entry; 
     char path[MAX_PATH + 1]; 
     char *file; 

     while ((entry = readdir(dirfile)) != NULL) 
     { 
      struct stat buf; 
      if(!strcmp(".",entry->d_name) || !strcmp("..",entry->d_name)) 
       continue; 

      sprintf(path,"%s/%.*s", adir, MAX_PATH-2-adir_len, entry->d_name); 

      if (stat(path,&buf) != 0) 
       continue; 

      file = entry->d_name; 
      if (recurse_dir && S_ISDIR(buf.st_mode)) 
       scan_dir(d, path, recurse_dir); 
      else if (match_extension(path) && _access(path, R_OK) == 0) // e.g. match .code 
       strs_find_add_str(&d->files,&d->n_files,_strdup(path)); 
     } 
     closedir(dirfile); 
    } 
    return; 
} 
関連する問題