Windowsのパスの最大長
Windowsのパスの最大長は以下の通り。
拡張パス長 | FAT32パス長 | PathCch.h | StdLib.h | 備考 | |
---|---|---|---|---|---|
prefix | 4 | — | 「\\?\ 」 |
||
DRIVE | 2 | 2 | MAX_DRIVE : 3 |
「C: 」 |
|
delimiter | 1 | 1 | 「\ 」DRIVEとDIRの区切り |
||
DIR | 32759 | 255 | MAX_DIR : 256 |
ディレクトリー部分 | |
delimiter | 1 | 1 | 「\ 」DIRとFNAMEの区切り |
||
(FNAME) | (255) | (255) | _MAX_FNAME : 256 |
ファイル名(拡張子含む) | |
(EXT) | (255) | (255) | _MAX_EXT : 256 |
拡張子 | |
PATH | 32767 | 259 | PATHCCH_MAX_CCH : 32768 |
_MAX_PATH : 260 |
パス全体 |
一つのディレクトリー名の最大長はファイル名の最大長と同じ。
個々のディレクトリー名やファイル名の長さがそれらの最大長以下であったとしても、それらを組み合わせたパス全体はパスの最大長を超えてはならない。
PathCch.hとStdLib.hのマクロ定義の数値は末尾のヌル文字分が含まれる。
長さの単位はUTF-16の要素数である。例えば多くの絵文字はUTF-16で2要素分となる。
Windows 10 1607からはprefix「\\?\
」をつけなくてもレジストリーまたはグループ・ポリシーでOSの設定を変更したうえで、以下のマニフェストを持つプロセスで拡張された長いパス名を使うことができる。
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
<ws2:longPathAware>true</ws2:longPathAware>
</windowsSettings>
</application>
- 参照:Naming Files, Paths, and Namespaces
- https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file
拡張パス長が使えるディレクトリー関係の関数
CreateDirectoryW
CreateDirectoryExW
GetCurrentDirectoryW
RemoveDirectoryW
SetCurrentDirectoryW
拡張パス長が使えるファイル関係の関数
CopyFileW
CopyFile2
CopyFileExW
CreateFileW
CreateFile2
CreateHardLinkW
CreateSymbolicLinkW
DeleteFileW
FindFirstFileW
FindFirstFileExW
FindNextFileW
GetFileAttributesW
GetFileAttributesExW
SetFileAttributesW
GetFullPathNameW
GetLongPathNameW
MoveFileW
MoveFileExW
MoveFileWithProgressW
ReplaceFileW
SearchPathW
FindFirstFileNameW
FindNextFileNameW
FindFirstStreamW
FindNextStreamW
GetCompressedFileSizeW
GetFinalPathNameByHandleW
GetModuleFileNameW
はプロセス起動時に指定されたパス名を返すだけらしいので、どのような長さのパス名が渡されるか不定らしい。