変えられないファイル名(1)

投稿者: | 2022年9月11日

Windows Server 2012R2で構築したファイルサーバ上に、アクセスできないファイルがあった。
調べてみると、ファイルパスが長すぎたり、フォルダ・ファイル名が半角スペースで終わっているなど、Windowsのファイルシステムの仕様から外れたファイルだった。

1.ファイルパスが長すぎる

Windowsとしてファイルパスが260文字に限られる、C言語のプログラムなどではよくつかわれたMAX_PATH(=260)の問題。Windows Server 2016 や Windows 10などでは、この制約が内部的には解除されて、もっと長大なパスでも扱える。Windows Server 2012R2でも、ファイル自体は作れる。ただ、下手するとアクセスできなくなる。非常に困る・・・。

なぜなら、互換性のためにいまだにMAX_PATHを上限とするが既定だから。

1-1.8.3形式

ならば、短ければいいと、昔懐かし、MS-DOS時代の8.3形式のファイル名を取得してみようと。
「DIR /X」で調べればいいはずなのだけど、対象のWindows Server 2012R2では8.3形式のファイル名の生成は無効化されているようで、確認できなかった。

1-2.MAX_PATHの制限解除

Windows10 クライアントからアクセスして操作を何とかしてみる。
ただ、MAX_PATHの制限はあるので、この制限を解除するにはレジストリを修正する必要があるらしい。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem の LongPathsEnabled
REG_DWORDの値で、ここを1にする
そして、再起動。なのだが、再起動が面倒なので、タスクマネージャからexplorerを再開するなり、別ユーザでアプリ(runasでcmdとか)を新たに立ち上げるなりすれば、そのセッション内なら値は有効。

ただ、拡張長パスというのもあるらしい。そういえば何となく見たことある。
https://docs.microsoft.com/ja-jp/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd
ファイルパスが、例えば「c:\users\hogehoge」だった場合、「\\?\c:\users\hogehoge」と頭にプレフィックス付ける。共有の場合は「\\?\UNC\server\share\folder」の形らしい。ただ、この場合、パスは必ずフルパス表記になる。なんとも面倒だ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です