Path.GetFullPath(path);
正常に動作します。しかしDirectory.CreateDirectory(path);
、例外をスローしpath too long
ます。2 つの方法でバックスラッシュのカウントが異なる可能性はありますか?
3 に答える
ILSpyではGetFullPath
、private 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文字より長くすることはできませんが、フルパス(各サブフォルダを含む)は長くすることができます。
エスケープ文字はコンパイル時に「カウント」されるため、どちらの方法でも 2 つではなく 1 つの文字 (バックスラッシュ) が認識されます。エスケープ文字は、アプリケーションがコンパイルされると「非表示」になり、ソース コードでのみ表示されます。つまり、"\\" シーケンスはコンパイル時に (実行時ではなく) 解決され、単一のバックスラッシュに変換されます。
Windows の最大パス サイズ (248 文字) に達している必要があるため、
Directory.CreateDirectory(path);
ディレクトリを作成できません。
ディレクトリ パスを貼り付けることができますか?