NTFSでは、文字列が\\?\
の接頭辞を付けて、260文字の制限を超えるパスであることを示すことができます。そのため、ファイルシステムはパスを正しく解釈して、PathTooLongException
を起こさないようにします。指定されたパスの同等の拡張パス文字列を返す.NET APIはありますか?
この順序で私のパス文字列の前に付けます.NET APIは、あります(詳細についてはhttp://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx#maxpathを参照)、または私は自分自身を書いて立ち往生していますか?
本質的に、私は以下に相当する方法を探しています。
static string ToExtendedPath(string path)
{
if(Path.IsPathRooted(path))
{
return @"\\?\" + path;
}
return Path.Combine(@"\\?\", path);
}
このトリックは、API関数の* all *では機能しません。ドキュメントが拡張されたファイルパスをサポートしていることを確認する必要があります。 *ファイル関数の大部分(シェルによって公開されています)は行います。 –
これは、この一連のブログ記事でよくカバーされています。http://blogs.msdn.com/b/bclteam/archive/2007/02/13/long-paths-in-net-part-1-of-3 -kim-hamilton.aspx –
'Path.Combine(@" \\?\ "、path)'は 'path'がルートされているときに' path'を返します。私はこの例をより正確に編集しました。 –