C:\home\SVGCats_src\src\nestfind.h
1|/************************************************************************** 2|* 1. <<< サブ・フォルダファイル列挙 (NestFind) >>> 3|***************************************************************************/ 4| 5|#ifndef __NESTFIND_H 6|#define __NESTFIND_H 7| 8| 9|#ifndef USES_PRIORITY_HEADER 10|/*[START_OF_PRIORITY_HEADER]*/ 11| 12|#define USES_NESTFIND 13|typedef struct _NestFind NestFind; 14| 15|#define NestFind_UseAttr /* ファイルサイズを参照する */ 16| 17|/*[END_OF_PRIORITY_HEADER]*/ 18|#endif /* USES_PRIORITY_HEADER */ 19| 20| 21|#ifdef __cplusplus 22|extern "C" { 23|#endif 24| 25|/************************************************************************** 26|* 2. <<< 定数 >>> 27|***************************************************************************/ 28| 29|#define NestFind_Err_OverNest 9991 30|#define NestFind_Err_OverBuf 9992 31| 32| 33|/* ファイル名の最大の長さ NameSize は、MS-DOS なら 8.3 の 12 文字なので 12 */ 34|#ifdef __UNIX__ 35|#define NestFind_nameSize 40 36|#endif 37|#ifdef __BORLAND__ 38|#define NestFind_nameSize 12 39|#endif 40|#ifdef _MSC_VER 41|#define NestFind_nameSize 255 42|#endif 43| 44|#define NestFind_absPathSize 255 /* 絶対ファイルパス名の最大の長さ */ 45| 46|#define NestFind_bufM 3000 /* ファイル名のバッファ数 BufN は、*/ 47| /* ネストしているすべてのディレクトリに含まれるファイルの数の最大制限 */ 48| /* NestFind_init の中の静的変数に使っています */ 49| 50|#define NestFind_nestM 50 /* ネストの深さの最大 */ 51| 52| 53|/************************************************************************** 54| 3. <<< サブ・フォルダを含めてファイルを列挙する [NestFind] >>> 55|【例】 56| NestFind f; 57| NestFind_init( &f, "path", false ); 58| while ( NestFind_next( &f ) ) { 59| char* s = NestFind_getAbsPath( &f ); 60| } 61| NestFind_finish( &f ); 62|***************************************************************************/ 63|struct _NestFind { 64| char** fname; /* ファイル名かdir名 */ 65| bool* isdir; 66| #ifdef NestFind_UseAttr 67| long* size; 68| #endif 69| 70| bool bFinishedDir; /* 探索が済んだディレクトリも列挙する */ 71| 72| int I [NestFind_nestM+1]; /* 現在の fname の第1配列番号 */ 73| int maxI [NestFind_nestM+1]; /* そのディレクトリの最大の I */ 74| int nest; /* ネスト・レベル、0 が基底 */ 75| 76| char absPath[NestFind_absPathSize+1]; /* 基底ディレクトリ・パス */ 77| char workPath [NestFind_absPathSize]; /* 属性参照用 */ 78|}; 79| 80|#ifndef K_AND_R 81| 82|void NestFind_init( NestFind*, const char*, bool bFinishedDir ); 83|void NestFind_finish( NestFind* ); 84|bool NestFind_next( NestFind* ); 85| 86|char* NestFind_getFName( NestFind* ); 87|char* NestFind_getPath( NestFind* ); 88|char* NestFind_getAbsPath( NestFind* ); 89|int NestFind_getNumer( NestFind* ); 90|int NestFind_getDenomi( NestFind* ); 91|bool NestFind_getIsDir( NestFind* ); 92|#ifdef NestFind_UseAttr 93|long NestFind_getSize( NestFind* ); 94|#endif 95| 96|#else 97| 98|char* NestFind_getFName( /*NestFind**/ ); 99|char* NestFind_getPath( /*NestFind**/ ); 100|char* NestFind_getAbsPath( /*NestFind**/ ); 101|bool NestFind_getIsDir( /*NestFind* this*/ ); 102|void NestFind_init( /*NestFind*, char**/ ); 103|bool NestFind_next( /*NestFind**/ ); 104| 105|#endif 106| 107| 108|#ifdef __cplusplus 109|} 110|#endif 111| 112|#endif 113| 114|