f_findfirst

ディレクトリ内のオブジェクトの検索を開始します。

FRESULT f_findfirst (
  DIR* dp,              /* [OUT] ディレクトリ オブジェクト構造体へのポインタ */
  FILINFO* fno,         /* [OUT] ファイル情報構造体へのポインタ */
  const TCHAR* path,    /* [IN] ディレクトリ名へのポインタ */
  const TCHAR* pattern  /* [IN] マッチ パターン文字列へのポインタ */
);

引数

dp
空のディレクトリ オブジェクト構造体へのポインタを指定します。
fno
最初にマッチしたディレクトリ項目を格納するファイル情報構造体へのポインタを指定します。
path
オープンするディレクトリのパス名を示すヌル文字'\0'終端の文字列へのポインタを指定します。
pattern
検索する名前を示すヌル文字'\0'終端の文字列へのポインタを指定します。この文字列は、続くf_findnext関数でも参照されるため、一連の処理が終了するまで有効でなければなりません。

戻り値

FR_OK, FR_DISK_ERR, FR_INT_ERR, FR_NOT_READY, FR_NO_PATH, FR_INVALID_NAME, FR_INVALID_OBJECT, FR_INVALID_DRIVE, FR_NOT_ENABLED, FR_NO_FILESYSTEM, FR_TIMEOUT, FR_NOT_ENOUGH_CORE, FR_TOO_MANY_OPEN_FILES

解説

pathで指定されるディレクトリを開き、そのディレクトリ内の項目の検索を開始します。正常終了すると、ディレクトリ オブジェクト構造体が作成され、最初に検索名文字列に名前がマッチした項目の情報がfnoの指定するファイル情報構造体にストアされます。名前のマッチする項目が見つからなかった場合は、fno->fname[]にヌル文字列が返されます。ファイル情報構造体の使い方については、f_readdir関数を参照してください。

マッチ パターン文字列は、ワイルドカード文字(?*)を含むことができます。?は任意の1文字に、*は0文字以上の任意の文字列にマッチします。LFN構成では、SFNとLFN(あれば)の両方に対してテストを行います。現リビジョンではパターン マッチングにおいて次の点で標準システムとは異なる動作となります。

対応情報

この関数は、f_opendir関数およびf_readdir関数のラッパー関数です。_USE_FIND == 1で、かつ_FS_MINIMIZE <= 1のとき使用可能になります。

使用例

/* ディレクトリ内のオブジェクトの検索と表示 */

void find_image (void)
{
    FRESULT fr;     /* 戻り値 */
    DIR dj;         /* ディレクトリ オブジェクト */
    FILINFO fno;    /* ファイル情報構造体 */
#if _USE_LFN
    char lfn[_MAX_LFN + 1];
    fno.lfname = lfn;
    fno.lfsize = _MAX_LFN + 1;
#endif

    fr = f_findfirst(&dj, &fno, "", "dsc*.jpg");  /* "dsc"で始まるJPEGファイルを検索 */

    while (fr == FR_OK && fno.fname[0]) {         /* 見つかる間繰り返し */
#if _USE_LFN
        printf("%s  %s\n", fno.fname, fno.lfname);/* 見つけた項目の名前を表示 */
#else
        printf("%s\n", fno.fname);
#endif
        fr = f_findnext(&dj, &fno);               /* 次を検索 */
    }
    f_closedir(&dj);
}

参照

f_findnext, f_closedir, DIR, FILINFO

戻る