ドライブの現在のディレクトリ パスの列挙

"ドライブの現在のディレクトリ" 形式のパス引数を使って取得されたファイル システム エントリ (たとえば、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