Windows のファイル-Part1 CRT
Windowsのファイルについて、まずは基本のVisual C++ 2005 SP1 CRTでの定義から。includeディレクトリにあるstdlib.hではこうなっています。
1: #define _MAX_PATH 260 /* max. length of full pathname */
2: #define _MAX_DRIVE 3 /* max. length of drive component */
3: #define _MAX_DIR 256 /* max. length of path component */
4: #define _MAX_FNAME 256 /* max. length of file name component */
5: #define _MAX_EXT 256 /* max. length of extension component */
先頭から、フルパス、ドライブ名、パス名、ファイル名、拡張子。これは_makepath()(今は_makepath_s())というCRT内のライブラリに渡す上限です。仮にファイル名が"C:\temp\base.txt"だったとすると、こう分解できます。
| 要素 |
対応 |
| _MAX_PATH |
C:\temp\base.txt |
| _MAX_DRIVE |
C: |
| _MAX_DIR |
\Temp\ |
| _MAX_FNAME |
base |
| _MAX_EXT |
.txt |
逆に"c:\temp\base.txt"を上記要素に分解するのは_splitpath()(今は_splitpath_s())。仮にファイル名のうち、「拡張子だけ取得したい」という場合、_splitpath()の引数のうち不要なところ(baseやdrive,dir)にNULLを渡せばよいです。
さて、_MAX_PATHが260となっています。おそらく世の中に流通しているプログラムのかなり多くはこの260を上限にしているのではないでしょうか。私も通常_MAX_PATHを上限にしています。だけどそうは問屋がおろさないところがあります。
続きます。