Windowsのパスの最大長
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
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
 
拡張パス長が使えるディレクトリー関係の関数
CreateDirectoryWCreateDirectoryExWGetCurrentDirectoryWRemoveDirectoryWSetCurrentDirectoryW
拡張パス長が使えるファイル関係の関数
CopyFileWCopyFile2CopyFileExWCreateFileWCreateFile2CreateHardLinkWCreateSymbolicLinkWDeleteFileWFindFirstFileWFindFirstFileExWFindNextFileWGetFileAttributesWGetFileAttributesExWSetFileAttributesWGetFullPathNameWGetLongPathNameWMoveFileWMoveFileExWMoveFileWithProgressWReplaceFileWSearchPathWFindFirstFileNameWFindNextFileNameWFindFirstStreamWFindNextStreamWGetCompressedFileSizeWGetFinalPathNameByHandleW
GetModuleFileNameWはプロセス起動時に指定されたパス名を返すだけらしいので、どのような長さのパス名が渡されるか不定らしい。