ようこそ 屋根裏部屋 mkII へ ログイン | 登録 | ヘルプ

Technological

ちょっとしたTIPSや私がはまったこと、調べたことなんかを書いていきます。

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を上限にしています。だけどそうは問屋がおろさないところがあります。

続きます。

公開 2007年12月6日 1:30 投稿者 kkamegawa
タグ , ,

コメントの通知

この投稿にコメントが付いた場合にメールを受信するには、登録してください。ここ

また次のフィードから、お気に入りのRSSリーダーを使って最新の状態を知ることもできます。 コメントのRSSフィード

コメント

# Windows file Part2 UNC and CRT @ 2007年12月9日 2:40

1: void SeparatePath( void ) 2: { 3: TCHAR szFile[] = _TEXT( "\\\\servername\\Sharename\\path\\base.txt"

Technological

# Windows File name length limit @ 2007年12月13日 1:26

NTFSファイルシステムにおいて、CRTでは 256文字と定義されています が、 CreateFile ではワイド文字であれば、32767文字まで指定できるとあります。ちょっと実験してみましょう。 1:

Technological

どのような感想ですか?

(必須) 
必須 
(必須) 
Powered by Community Server, by Telligent Systems