ドライブの現在のディレクトリ パスの列挙
"ドライブの現在のディレクトリ" 形式のパス引数を使って取得されたファイル システム エントリ (たとえば、C:
) は、directory path + separator + entry name
を組み合わせることによって誤って形成されました。 エントリの正しいパスを返すために、そのようなパスには区切り記号が追加されなくなりました。
以前の動作
以前は、列挙されたファイル システム エントリがドライブのルートにあるように見える区切り文字が追加されていました。
string pathToEnumerate = "C:";
Console.WriteLine($"Full path of \"{pathToEnumerate}\" is {Path.GetFullPath(pathToEnumerate)}.");
Path.GetFullPath(pathToEnumerate);
Console.WriteLine($"Enumerating files and folders in \"{pathToEnumerate}\".");
foreach (string entry in Directory.GetFileSystemEntries(pathToEnumerate))
{
Console.WriteLine(entry);
}
このコード スニペットを実行すると、次のような出力が得られます。
Full path of "C:" is C:\Users\myalias\consoleapps\Program
Enumerating files and folders in "C:".
C:\Program.csproj
C:\Program.sln
C:\bin
C:\obj
C:\Program.cs
新しい動作
.NET 8 以降のバージョンで同じコード スニペットを実行すると、各パスに区切り文字のない出力が生成されます。
Full path of "C:" is C:\Users\myalias\consoleapps\Program.
Enumerating files and folders in "C:".
C:Program.csproj
C:Program.sln
C:bin
C:obj
C:Program.cs
導入されたバージョン
.NET 8
破壊的変更の種類
この変更は、動作変更です。
変更理由
ユーザーから、以前の動作が正しくないと報告されました。 これは .NET Framework からの回帰でもありました。
推奨される操作
C:
のようなパスの列挙に依存している Windows ユーザーの場合は、アプリケーションの I/O 操作を再検討する必要があります。 これは、運用環境で使われる可能性が低い、まれなシナリオです。 現在のディレクトリを列挙する必要のあるほとんどのユーザーは、代わりに Environment.CurrentDirectory を使います。
影響を受ける API
- System.IO.Directory.EnumerateFiles
- System.IO.Directory.EnumerateDirectories
- System.IO.Directory.EnumerateFileSystemEntries
- System.IO.Directory.GetFiles
- System.IO.Directory.GetDirectories
- System.IO.Directory.GetFileSystemEntries
- System.IO.DirectoryInfo.EnumerateFiles
- System.IO.DirectoryInfo.EnumerateDirectories
- System.IO.DirectoryInfo.EnumerateFileSystemInfos
- System.IO.DirectoryInfo.GetFiles
- System.IO.DirectoryInfo.GetDirectories
- System.IO.DirectoryInfo.GetFileSystemInfos
- FileSystemEnumerable<TResult>(String, FileSystemEnumerable<TResult>.FindTransform, EnumerationOptions)
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET