忍者ブログ

おぼえがき

必要な事柄を忘れないように書き留めた書きつけ

Windowsのパスの最大長

Windowsのパスの最大長は以下の通り。


Windowsのパス等の最大長
拡張パス長FAT32パス長PathCch.hStdLib.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はプロセス起動時に指定されたパス名を返すだけらしいので、どのような長さのパス名が渡されるか不定らしい。

コメント

※ パスワードを入れると後でコメントを編集することができます。
ページ・トップ
[PR]
©おぼえがき 2006
Powered by 忍者ブログ