こんにちは、阿久津です。Windowsは長年の慣例からパスの最大文字列を「260」文字以内と定めてきました。本稿を執筆するにあたって古い文献を調べたところ、Windows 3.1 SDKに「MAX_PATH 260」という記述がありましたので、26年間も続いてきたことになります。(図01~02)。

図01 Windows 10ではヘルプファイルを開けないため、Windows 8.1でWindows 3.1 SDKの「API32WH.HLP」ファイルを確認

図02 Windows 10 SDKの「stdlib.h」でもパスの最大値は「260」と定義されています

今の時代となっては、「さっさと制限を外してしまえば」と思いがちですが、そうすると古いAPIが正しく動作しない可能性があり、下位互換性を維持するために踏襲してきたのでしょう。

Windows 10でもアプリケーションなどが誤って作成した260文字以上のファイルやフォルダーを削除できなくなる問題が発生します。その際は管理者権限でコマンドプロンプトを起動し、「del "\?\c:\%USERPROFILE%\Desktop\foo.txt"」といった内部構文を使って削除できる場合があるのでお試しください。

さて、2016年夏リリース予定のWindows 10 バージョン1607以降はこの制限がなくなるかも知れません。Windows 10 Insider Preview ビルド14352のローカルグループポリシーエディターには、「Enable NTFS long paths」という設定項目が加わりました(図03)。

図03 Windows 10 Insider Preview ビルド14352のグループポリシーエディターで確認できる「Enable NTFS long paths」

端的に説明すると Win32アプリケーションやWindowsストアアプリで260文字制限を超えたパスにアクセス可能になるとのこと。そこで今回は、Windows 10 Insider Preview最新版を対象に、260文字制限を外すチューニングをお届けします。

1. 管理者権限でレジストリエディターを起動します。
2. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystemキーを開きます。
3. DWORD値「LongPathsEnabled」を開き、データを「1」に変更します。
4. レジストリエディターを終了します。
5. PCを再起動します。

これで操作が完了しました(図04~08)。

図04 [Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「regedit」と入力して<OK>ボタンをクリックします

図05 レジストリエディターが起動したら、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystemキーを開きます

図06 DWORD値「LongPathsEnabled」をダブルクリックし、データを「1」に変更して<OK>ボタンをクリックします

図07 <×>ボタンをクリックして、レジストリエディターを終了します

図08 <スタート>→<電源>とボタンを順にクリックし、<再起動>をクリックしてPCを再起動します

早速結果を確認したいところですが、残念ながら本チューニングによる変化は確認できません。コードを書ける方なら261文字のパスを出力するWin32アプリケーションを作成し、試してみると面白いでしょう。いずれにせよ今後は260文字制限に悩まされることはなくなりそうです。ちなみにデスクトップなどに作成するフォルダー名の最大値は113文字と変化しませんでした。

なお、ローカルグループポリシーエディターの「Enable NTFS long paths」を有効にすると、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\PoliciesキーのDWORD値「LongPathsEnabled」が持つデータが「1」に変更されます。本チューニングを破棄する場合は、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystemキーのDWORD値「LongPathsEnabled」が持つデータを「0」に変更してPCを再起動してください。

それでは、また次号でお目にかかりましょう。

阿久津良和(Cactus)