2016-11-23 6 views
0

私はプログラムを持っており、渡されたファイル名で、現在のディレクトリとすべてのサブディレクトリに存在するその名前のファイルをすべて見つけて開く必要があります。Cのディレクトリ/サブディレクトリにあるファイルのインスタンスを検索するにはどうすればよいですか?

私はサブディレクトリの名前を知らない。名前やその他のファイルは気にしません。渡された名前ですべてのファイルを開くことができればいいだけです。

ありがとうございます!

+1

Linuxや他のほとんどのシステムでは、使用したいと思います[ 'nftw()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/nftw.html)。 'fn'引数を使って、名前があなたのファイル名と一致すれば、そのファイルを操作する関数を参照することができます。 –

+0

あなた自身でディレクトリ( 'opendir'、' readdir'、 'closedir')を繰り返し、リンクのメタデータ(' stat')を解析したいと思ったら。 –

答えて

1

ntfw()の例を示します。

#define _XOPEN_SOURCE 500 
#include <ftw.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <stdint.h> 

static int display_info(const char *fpath, const struct stat *sb, int tflag, struct FTW *ftwbuf){ 
    char *fileName = "findMe.txt"; 
    /* fpath holds the full path of the file from the specified starting directory */ 
    if (strstr(fpath, fileName)){ 
     printf("Match found!\n"); 
    } 
    return 0; 
} 

int main(int argc, char **argv){ 
    /* If a starting directory isn't specified, use the current dir */ 
    if (nftw((argc < 2) ? "." : argv[1], display_info, 20, 0) == -1) { 
     perror("nftw"); 
     exit(EXIT_FAILURE); 
    } 
    exit(EXIT_SUCCESS); 
} 
+0

もちろん、 'strstr()'の戻り値を検証して、あなたが_ifindMe.txt_または_dont_findMe.txt_を扱っていないことを確認してください。 :-) –

+0

@ChronoKitsuneエラーチェックは本当に重要です! ...私のSO答えの大半から抜け出した:S – Chirality

+0

OPに、批判ではなく簡単な目標を達成するための 'nftw()'の使い方のデモンストレーションであることをOPに知らせるだけのコメントでした。 。 :-) –

関連する問題