C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 54 を表示中)
■30313 / )  Re[1]: _MAX_PATH について
□投稿者/ Jitta (564回)-(2008/12/20(Sat) 23:24:48)
Jitta さんの Web サイト
No30310 (雲 さん) に返信
>
> #define _MAX_PATH 260 /* max. length of full pathname */
> #define _MAX_DRIVE 3 /* max. length of drive component */
> #define _MAX_DIR 256 /* max. length of path component */
> #define _MAX_FNAME 256 /* max. length of file name component */
> #define _MAX_EXT 256 /* max. length of extension component */
>
> と定義されていることから、_MAX_PATH = 260 はいくら何でも短すぎでは。
> と言う気になってきました。

なぜ?

_MAX_DRIVE は、ドライブ文字の長さなので、"d:" とか "z:" です。終端子を含めても3文字あれば十分です。
_MAX_DIR は、ディレクトリの長さです。パス デリミタを含めて256文字に制限されています。たぶん、FAT の制限を引きずっている。
_MAX_FNAME は、ファイル名単体の長さです。つまり、ファイル名は256文字、ディレクトリ名は256文字で計512文字いけそうですが、ディレクトリ、ファイル名を含めた「パス名」が、256文字以内に制限されています。

なので、_MAX_PATH は 260 で十分です。

しかし、3200文字(だったかな?)に拡大する方法もあります。"\\hostname\" から始まる文字列の時は、拡張されます。


>
> だとすると、例えば、
>
> GetModuleFileName
>
> でモジュールのフルパスを取得するときには、いったい、いくつの文字列の配列を渡せば良いのか?
> というのが、わからなくなってきました。
>
> MSDNを読むと、特に、そのあたりについては、何も言っていないし。
>
> 実用上は、TCHAR filepath[32000] とかしておけば良いかもしれませんが、もっと良い
> 記述方法とかあると嬉しいな。と思っています。
>
> 皆さんは、どのようにされているのでしょうか?
>
返信 編集キー/


管理者用

- Child Tree -