X-Git-Url: http://cloudbase.mooo.com/gitweb/z180-stamp.git/blobdiff_plain/7b78a5a287827db9e9b16286f3604aef69b37c5c..70702af1370e44e32fb2c3c507e4759a187b4fe5:/fatfs/doc/ja/readdir.html diff --git a/fatfs/doc/ja/readdir.html b/fatfs/doc/ja/readdir.html index fc8fc5c..5305b0a 100644 --- a/fatfs/doc/ja/readdir.html +++ b/fatfs/doc/ja/readdir.html @@ -26,9 +26,9 @@ FRESULT f_readdir (

引数

dp
-
有効なディレクトリ オブジェクト構造体へのポインタを指定します。
+
f_opendir関数で作成された有効なディレクトリ オブジェクトへのポインタを指定します。
fno
-
読み出したディレクトリ項目を格納するファイル情報構造体へのポインタを指定します。
+
読み出したディレクトリ項目を格納するファイル情報構造体へのポインタ、またはヌル ポインタを指定します。
@@ -39,7 +39,6 @@ FRESULT f_readdir ( FR_OK, FR_DISK_ERR, FR_INT_ERR, -FR_NOT_READY, FR_INVALID_OBJECT, FR_TIMEOUT, FR_NOT_ENOUGH_CORE @@ -49,18 +48,16 @@ FRESULT f_readdir (

解説

-

ディレクトリの項目(ファイルとディレクトリ)を順次読み出します。この関数を繰り返し実行することによりそのディレクトリの全ての項目を読み出すことができます。得られるファイル情報の詳細については FILINFO構造体を参照してください。全ての項目が読み出され、読み出す項目がもう無いときは、fname[]メンバにヌル文字列が返されます。fnoにヌル ポインタを指定すると、そのディレクトリのリード インデックスを先頭に巻き戻します。また、この関数は次に示すように関連する構成オプションにより動作が変わります。

-

ドット エントリ("."、"..")は、相対パスが有効なとき(_FS_RPATH >= 1)にのみ出力に現れます。

-

LFN機能が有効な時は、この関数の呼び出しに先立ってFILINFO構造体のlfnameとlfsizeが有効な値で初期化されていなければなりません。lfnameはLFNを格納するバッファで、lfsizeはそのバッファの要素数です。LFNを読み出す必要がないときは、lfnameにヌル ポインタをセットしてください。次の条件に一つでも該当する場合は、LFN格納バッファにヌル文字列が返されます。

+

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

+

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

-

また、ディレクトリ項目にLFN情報が存在しない場合は、fname[]に英小文字が含まれる場合があります。

+

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

-

対応情報

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

@@ -70,44 +67,50 @@ FRESULT f_readdir (

使用例

+FATFS fs;
+char buff[256];
+
 FRESULT scan_files (
     char* path        /* 開始ノード (ワークエリアとしても使用) */
 )
 {
     FRESULT res;
-    FILINFO fno;
     DIR dir;
-    int i;
-    char *fn;   /* 非Unicode構成を想定 */
-#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);                       /* ディレクトリを開く */
     if (res == FR_OK) {
-        i = strlen(path);
         for (;;) {
             res = f_readdir(&dir, &fno);                   /* ディレクトリ項目を1個読み出す */
             if (res != FR_OK || fno.fname[0] == 0) break;  /* エラーまたは項目無しのときは抜ける */
-            if (fno.fname[0] == '.') continue;             /* ドットエントリは無視 */
-#if _USE_LFN
-            fn = *fno.lfname ? fno.lfname : fno.fname;
-#else
-            fn = fno.fname;
-#endif
             if (fno.fattrib & AM_DIR) {                    /* ディレクトリ */
-                sprintf(&path[i], "/%s", fn);
-                res = scan_files(path);
-                path[i] = 0;
+                i = strlen(path);
+                sprintf(&path[i], "/%s", fno.fname);
+                res = scan_files(path);                    /* 一つ下へ */
                 if (res != FR_OK) break;
+                path[i] = 0;
             } else {                                       /* ファイル */
-                printf("%s/%s\n", path, fn);
+                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;