X-Git-Url: http://cloudbase.mooo.com/gitweb/z180-stamp.git/blobdiff_plain/5366852335044c1e68a5c32548d3051cc943552f..b30c4e8f1aef96f6fdc93da9f125545f5f74d06e:/fatfs/doc/ja/readdir.html diff --git a/fatfs/doc/ja/readdir.html b/fatfs/doc/ja/readdir.html index bd1c34e..5305b0a 100644 --- a/fatfs/doc/ja/readdir.html +++ b/fatfs/doc/ja/readdir.html @@ -1,7 +1,7 @@ - + @@ -13,33 +13,32 @@

f_readdir

-

ƒfƒBƒŒƒNƒgƒŠ€–Ú‚ð“ǂݏo‚µ‚Ü‚·B

+

ディレクトリ項目を読み出します。

 FRESULT f_readdir (
-  DIR* dp,      /* [IN] ƒfƒBƒŒƒNƒgƒŠEƒuƒWƒFƒNƒg\‘¢‘̂ւ̃|ƒCƒ“ƒ^ */
-  FILINFO* fno  /* [OUT] ƒtƒ@ƒCƒ‹î•ñ\‘¢‘̂ւ̃|ƒCƒ“ƒ^ */
+  DIR* dp,      /* [IN] ディレクトリ ブジェクト構造体へのポインタ */
+  FILINFO* fno  /* [OUT] ファイル情報構造体へのポインタ */
 );
 
-

ˆø”

+

引数

dp
-
—LŒø‚ȃfƒBƒŒƒNƒgƒŠEƒIƒuƒWƒFƒNƒg\‘¢‘̂ւ̃|ƒCƒ“ƒ^‚ðŽw’肵‚Ü‚·B
+
f_opendir関数で作成された有効なディレクトリ オブジェクトへのポインタを指定します。
fno
-
“ǂݏo‚µ‚½ƒfƒBƒŒƒNƒgƒŠ€–Ú‚ðŠi”[‚·‚éƒtƒ@ƒCƒ‹î•ñ\‘¢‘̂ւ̃|ƒCƒ“ƒ^‚ðŽw’肵‚Ü‚·B
+
読み出したディレクトリ項目を格納するファイル情報構造体へのポインタ、またはヌル ポインタを指定します。
-

–ß‚è’l

+

戻り値

FR_OK, FR_DISK_ERR, FR_INT_ERR, -FR_NOT_READY, FR_INVALID_OBJECT, FR_TIMEOUT, FR_NOT_ENOUGH_CORE @@ -48,66 +47,70 @@ FRESULT f_readdir (

-

‰ðà

-

ƒfƒBƒŒƒNƒgƒŠ‚̍€–Ú(ƒtƒ@ƒCƒ‹‚ƃfƒBƒŒƒNƒgƒŠ)‚ð‡ŽŸ“ǂݏo‚µ‚Ü‚·B‚±‚̊֐”‚ðŒJ‚è•Ô‚µŽÀs‚·‚邱‚Æ‚É‚æ‚è‚»‚̃fƒBƒŒƒNƒgƒŠ‚Ì‘S‚Ă̍€–Ú‚ð“ǂݏo‚·‚±‚Æ‚ª‚Å‚«‚Ü‚·B“¾‚ç‚ê‚éƒtƒ@ƒCƒ‹î•ñ‚̏ڍׂɂ‚¢‚Ä‚Í FILINFO\‘¢‘Ì‚ðŽQÆ‚µ‚Ä‚­‚¾‚³‚¢B‘S‚Ă̍€–Ú‚ª“ǂݏo‚³‚êA“ǂݏo‚·€–Ú‚ª‚à‚¤–³‚¢‚Æ‚«‚́Afname[]ƒƒ“ƒo‚Ƀkƒ‹•¶Žš—ñ‚ª•Ô‚³‚ê‚Ü‚·Bfno‚Ƀkƒ‹Eƒ|ƒCƒ“ƒ^‚ðŽw’è‚·‚é‚ƁA‚»‚̃fƒBƒŒƒNƒgƒŠ‚̃Š[ƒhEƒCƒ“ƒfƒbƒNƒX‚ðæ“ª‚ÉŠª‚«–ß‚µ‚Ü‚·B‚Ü‚½A‚±‚̊֐”‚ÍŽŸ‚ÉŽ¦‚·‚悤‚ÉŠÖ˜A‚·‚é\¬ƒIƒvƒVƒ‡ƒ“‚É‚æ‚è“®ì‚ª•Ï‚í‚è‚Ü‚·B

-

ƒhƒbƒgEƒGƒ“ƒgƒŠ("."A"..")‚́A‘Š‘΃pƒX‚ª—LŒø‚È‚Æ‚«(_FS_RPATH >= 1)‚ɂ̂ݏo—Í‚ÉŒ»‚ê‚Ü‚·B

-

LFN‹@”\‚ª—LŒø‚ÈŽž‚́A‚±‚̊֐”‚̌Ăяo‚µ‚ɐ旧‚Á‚ÄFILINFO\‘¢‘Ì‚Ìlfname‚Ælfsize‚ª—LŒø‚È’l‚ŏ‰Šú‰»‚³‚ê‚Ä‚¢‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñBlfname‚ÍLFN‚ðŠi”[‚·‚éƒoƒbƒtƒ@‚ŁAlfsize‚Í‚»‚̃oƒbƒtƒ@‚Ì—v‘f”‚Å‚·BLFN‚ð“ǂݏo‚·•K—v‚ª‚È‚¢‚Æ‚«‚́Alfname‚Ƀkƒ‹Eƒ|ƒCƒ“ƒ^‚ðƒZƒbƒg‚µ‚Ä‚­‚¾‚³‚¢BŽŸ‚ÌðŒ‚Éˆê‚‚łàŠY“–‚·‚éê‡‚́ALFNŠi”[ƒoƒbƒtƒ@‚Ƀkƒ‹•¶Žš—ñ‚ª•Ô‚³‚ê‚Ü‚·B

+

解説

+

ディレクトリの項目(ファイルおよびサブ ディレクトリ)の情報を順次読み出します。この関数を繰り返し実行することによりそのディレクトリの全ての項目を読み出すことができます。得られるファイル情報の詳細については FILINFO構造体を参照してください。全ての項目が読み出され、読み出す項目がもう無いときは、fno->fname[]にヌル文字列が返されます。fnoにヌル ポインタを指定すると、そのディレクトリのリード インデックスを先頭に巻き戻します。サブ ディレクトリのドット エントリ("."と"..")は、出力に現れません。

+

LFN構成では、altname[]が新たに定義され、そのオブジェクトの短いファイル名がストアされます。次の条件のときは長いファイル名を返せないのでfname[]に短いファイル名がストアされ、altname[]はヌル文字列になります。

-

‚Ü‚½AƒfƒBƒŒƒNƒgƒŠ€–Ú‚ÉLFNî•ñ‚ª‘¶Ý‚µ‚È‚¢ê‡‚́Afname[]‚ɉp¬•¶Žš‚ªŠÜ‚Ü‚ê‚éê‡‚ª‚ ‚è‚Ü‚·B

+

exFATボリュームのディレクトリを読み出すとき、構成によっては問題が発生します。exFATでは短いファイル名がサポートされません。つまり、上記の条件のとき代わりに返すファイル名が無いということです。このような場合はfname[]に"?"が返され、そのオブジェクトにアクセスできないことを示します。この問題を避けるには、FatFsの構成を_LFN_UNICODE = 1および_MAX_LFN = 255として長いファイル名に完全対応とする必要があります。

-
-

‘Ήžî•ñ

-

_FS_MINIMIZE <= 1‚Ì‚Æ‚«‚ÉŽg—p‰Â”\‚Å‚·B

+

対応情報

+

_FS_MINIMIZE <= 1のときに使用可能です。

-

Žg—p—á

+

使用例

+FATFS fs;
+char buff[256];
+
 FRESULT scan_files (
-    char* path        /* ŠJŽnƒm[ƒh (ƒ[ƒNƒGƒŠƒA‚Æ‚µ‚Ä‚àŽg—p) */
+    char* path        /* 開始ノード (ワークエリアとしても使用) */
 )
 {
     FRESULT res;
-    FILINFO fno;
     DIR dir;
-    int i;
-    char *fn;   /* ”ñUnicode\¬‚ð‘z’è */
-#if _USE_LFN
-    static char lfn[_MAX_LFN + 1];
-    fno.lfname = lfn;
-    fno.lfsize = sizeof lfn;
-#endif
+    UINT i;
+    static FILINFO fno;
 
 
-    res = f_opendir(&dir, path);                       /* ƒfƒBƒŒƒNƒgƒŠ‚ðŠJ‚­ */
+    res = f_opendir(&dir, path);                       /* ディレクトリを開く */
     if (res == FR_OK) {
-        i = strlen(path);
         for (;;) {
-            res = f_readdir(&dir, &fno);                   /* ƒfƒBƒŒƒNƒgƒŠ€–Ú‚ð1ŒÂ“ǂݏo‚· */
-            if (res != FR_OK || fno.fname[0] == 0) break;  /* ƒGƒ‰[‚Ü‚½‚͍€–Ú–³‚µ‚Ì‚Æ‚«‚Í”²‚¯‚é */
-            if (fno.fname[0] == '.') continue;             /* ƒhƒbƒgƒGƒ“ƒgƒŠ‚Í–³Ž‹ */
-#if _USE_LFN
-            fn = *fno.lfname ? fno.lfname : fno.fname;
-#else
-            fn = fno.fname;
-#endif
-            if (fno.fattrib & AM_DIR) {                    /* ƒfƒBƒŒƒNƒgƒŠ */
-                sprintf(&path[i], "/%s", fn);
-                res = scan_files(path);
+            res = f_readdir(&dir, &fno);                   /* ディレクトリ項目を1個読み出す */
+            if (res != FR_OK || fno.fname[0] == 0) break;  /* エラーまたは項目無しのときは抜ける */
+            if (fno.fattrib & AM_DIR) {                    /* ディレクトリ */
+                i = strlen(path);
+                sprintf(&path[i], "/%s", fno.fname);
+                res = scan_files(path);                    /* 一つ下へ */
                 if (res != FR_OK) break;
                 path[i] = 0;
-            } else {                                       /* ƒtƒ@ƒCƒ‹ */
-                printf("%s/%s\n", path, fn);
+            } else {                                       /* ファイル */
+                printf("%s/%s\n", path, fno.fname);
             }
         }
-        f_closedir(&dir);
+        f_closedir(&dir)
+    }
+
+    return res;
+}
+
+
+int main (void)
+{
+    FRESULT res;
+
+
+    res = f_mount(&fs, "", 1);
+    if (res == FR_OK) {
+        strcpy(buff, "/");
+        res = scan_files(buff);
     }
 
     return res;
@@ -117,10 +120,10 @@ FRESULT scan_files (
 
 
 
-

ŽQÆ

+

参照

f_opendir, f_closedir, f_stat, FILINFO, DIR

-

–ß‚é

+

戻る