1

Path.GetFullPath(path);正常に動作します。しかしDirectory.CreateDirectory(path);、例外をスローしpath too longます。2 つの方法でバックスラッシュのカウントが異なる可能性はありますか?

4

3 に答える 3

3

ILSpyではGetFullPathprivate const MaxDirectoryLength(255)を使用しているのに対しCreateDirectory、248を使用しているようです。

Path.GetFullPath-> GetFullPathInternal-> NormalizePath

// System.IO.Path
private static readonly int MaxDirectoryLength = 255;

// ...
if (num8 - num5 > Path.MaxDirectoryLength)
{
    throw new PathTooLongException(Environment.GetResourceString("IO.PathTooLong"));
}
// ...

Directory.CreateDirectory-> InternalCreateDirectory(ところで、NormalizePathはInternalCreateDirectoryの前にも呼び出されます)

// ...
string text2 = list[list.Count - 1];
list.RemoveAt(list.Count - 1);
if (text2.Length >= 248)
{
    throw new PathTooLongException(Environment.GetResourceString("IO.PathTooLong"));
}
// ...

したがって、フォルダ名は248文字より長くすることはできませんが、フルパス(各サブフォルダを含む)は長くすることができます。

于 2012-11-21T12:33:10.587 に答える
0

エスケープ文字はコンパイル時に「カウント」されるため、どちらの方法でも 2 つではなく 1 つの文字 (バックスラッシュ) が認識されます。エスケープ文字は、アプリケーションがコンパイルされると「非表示」になり、ソース コードでのみ表示されます。つまり、"\\" シーケンスはコンパイル時に (実行時ではなく) 解決され、単一のバックスラッシュに変換されます。

于 2012-11-20T22:39:57.450 に答える
0

Windows の最大パス サイズ (248 文字) に達している必要があるため、

Directory.CreateDirectory(path);

ディレクトリを作成できません。

ディレクトリ パスを貼り付けることができますか?

于 2012-11-20T22:42:39.483 に答える