さて、よく使っているWindowsのフォルダの階層ですがどこまで深く作っていますか?
実はこのフォルダ階層は容量が空いてる限りずっと掘り下げられる、
というわけではないようです。
Windowsではファイル名の最大長は255文字までとなっているようですが
(実際そんな長いファイル名を作って試した事がないからわからないけど)
フォルダーはどこまで掘り下げられるんでしょう?
ここでは現在Windowsで標準的に使われているNTFSというファイルシステムを前提で
話を進めてみたいと思います。
フォルダの中にフォルダを作ると
深くなればなるほど○○の中の○○の・・・と、ファイルの場所を指すための情報が増えます。
エクスプローラー等で見るとわかりやすいですが、上の方に今どこのフォルダを開いているか?
という情報が表示されています。↓を見てください。
![path001](https://amakusa-web.jp/Sozai/Mg/FileAccess.aspx?aplUseNo=12267&angoFolderKey=FQ6vIUqE2H8UAXEKXn%2f5KQ%3d%3d&angoFileKey=olWN%2f%2f8koVC5CTbFfsziXg%3d%3d)
この例でいくと、Cドライブの中のProgram Filesの中のJavaというフォルダを開いている事がわかります。
さらに、そこのバーの中のJavaと書いてある右の空白部分を押してみましょう。
以下のような文字列が表示されます。
![path002](https://amakusa-web.jp/Sozai/Mg/FileAccess.aspx?aplUseNo=12267&angoFolderKey=FQ6vIUqE2H8UAXEKXn%2f5KQ%3d%3d&angoFileKey=P4AZXLwiYU4L56ULiom%2fdw%3d%3d)
C:\Program Files\Javaと表示が変わりました。
カンのいい人は気付いたと思いますが
「:」を「ドライブの」、「\」を「の中の」に置き換えてみます。
C「ドライブ」「の中の」Program Files「の中の」Java
もうそのまんまですね。
こういったフォルダやファイルの場所を指したものを「パス」と言ったりします。
「Pass」ではなく「Path」です。
さて、このパスですがフォルダを深く掘り下げると当然長くなって行きます。
そして、このパスの長さには限界があります。
どのくらいの長さのパスまで有効なのでしょうか?
エクスプローラ等で扱える最大の長さは多分259文字のようです。
つまり、ファイル名を255文字で作ったらドライブの直下にしか置けなくなります。
C:\長いファイル名のファイル.....(255文字)
だと、「C:\」の3文字+ファイル名の255文字で258文字になります。
これより深くフォルダを作ろうとしてもフォルダ名には最低でも1文字は必要です。
これを作ると259文字になりますが、このフォルダの中のという部分も必要になるため
「\」も追加しないといけません。
すると、259文字をオーバーしてしまいます。
なので直下にしか置けなくなってしまいます。
Visual C++という開発環境ではMAX_PATHという定数が定義されていて
この値は260となっています。
(259ではない理由は、C言語では文字列の終端にヌル文字という特殊な値を設定する必要があるため)
このあたりはプログラミングの話題を書く場合にでも書きましょうw
なぜMAX_PATHが260なのかはググれば色々と出てきますが、
まずドライブを表す2文字(「C:」など)とルートを表す1文字(\)、
そして拡張子とファイル名を区切るドット「.」の1文字
そしてファイル名の最大長である255文字、
最後にヌル終端の1文字、これらを合計すると260文字になるわけです。
エクスプローラなどではMAX_PATHの制限を受けてしまうようですが
Unicode版のWindowsAPIは最大32000文字までのパスが扱えます。
(この辺もプログラミングの話題を書く事があれば書きますw)
ただし、多くのアプリケーションではMAX_PATHを使っている場合が多く(わたしもですがw)
あまりにも長いパスだとプログラムがうまく動作しないといった事もありえます。
substなんかのコマンドを使うと別のドライブ文字に深い階層のフォルダを割り当てて
パスを短くしてアクセスは可能ですけどねw
まぁそれは対症療法みたいなものなので、259文字を超えるような
長いパスを扱う環境を作らない方が変なトラブルに悩まされずに済むかもしれませんw