\\?\
特定のフォルダーでのみ、ファイル パスの前に無効な文字 ( ) が表示されるのはなぜですか?
無効なファイルパス:
\\?\D:\computerfiles...
無効なパスを持つファイルは元のフォルダーで開くことができません。
一部のファイルでは、文字\\?\
は元の場所にある場合にのみ表示されますが、ファイルが別のフォルダーにコピーされると表示されません。
開かないファイル(画像など)を見つけて、プロパティをチェックして無効なプレフィックスを検出した場合にのみ、これが表示されます。
また、無効なプレフィックスを持つすべてのパスを見つけるにはどうすればよいでしょうか?
答え1
これは不正な文字ではありません。これは Windows がパスのマングリングをオフにするための信号です。これにより、 より長いパスを使用できるようになりますMAX_PATH
。
に従ってファイル、パス、名前空間の命名:
Windows API のファイル I/O 関数は、次のセクションで説明するように「\\?\」プレフィックスを使用する場合を除き、名前を NT スタイルの名前に変換する一環として「/」を「\」に変換します。
Windows API には、最大合計パス長が 32,767 文字の拡張パスを許可する Unicode バージョンも備えた関数が多数あります。この種類のパスは、バックスラッシュで区切られたコンポーネントで構成され、各コンポーネントは GetVolumeInformation 関数の lpMaximumComponentLength パラメータで返される値 (通常、この値は 255 文字) までです。拡張パスを指定するには、"\\?\" プレフィックスを使用します。たとえば、"\\?\D:\very long path" です。
Windows エクスプローラーは、ある時点で長いパスにアクセスできるようになっていたようです。その過程で、ファイル/フォルダーのプロパティ ページの [場所] フィールドに次の内容が表示されます。
- 「通常の」道は、十分に短ければ
- 8.3 名パス( など
C:\WHATEV~1\...
)(このファイルシステムに 8.3 名が存在し、十分に短い場合) - それ以外の場合、拡張長パス
tl;dr: パスが長すぎます。