2011-07-29 7 views
4

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); 
} 
+0

このトリックは、API関数の* all *では機能しません。ドキュメントが拡張されたファイルパスをサポートしていることを確認する必要があります。 *ファイル関数の大部分(シェルによって公開されています)は行います。 –

+5

これは、この一連のブログ記事でよくカバーされています。http://blogs.msdn.com/b/bclteam/archive/2007/02/13/long-paths-in-net-part-1-of-3 -kim-hamilton.aspx –

+0

'Path.Combine(@" \\?\ "、path)'は 'path'がルートされているときに' path'を返します。私はこの例をより正確に編集しました。 –

答えて

6

いいえ、与えられた「通常」のパスを拡張構文に変換する.NET APIはありません。あなたはあなた自身をロールバックしなければなりません(それは些細なことです)。

注意:Cody GrayとHans Passantが述べたように、.NETフレームワークは長い(拡張)パスをサポートしていません。それらを操作する場合は、APIを直接使用する必要があります。また、すべてのAPI関数が長いパスをサポートするわけではありません。一般に、低レベルの関数はそうします。 MSDNのドキュメントを参照してください。

私が行ったことは、関連するAPI関数(CreateFileなど)のラッパー関数を記述し、.NETファイルシステム関数の代わりにそれらのラッパーを呼び出すことでした。

関連する問題