1

文字列「D:\test\...」がメソッドに渡されると、マシンSystem.IO.Directory.Existsに返さTrueれます。次のコードを確認しました。

public static void Main(string[] args)
{
    if (Directory.Exists("D:\\test\\..."))
        Console.WriteLine("Directory exist.");  //Control gets here
    else
        Console.WriteLine("Does not exist.");
}

これは、指定した場所に「...」(3 つのドット) という名前のディレクトリが存在しない場合でも発生します。

これをさらに調査すると、文字列の最後の部分を完全に無視して、内部的に「D:」のみをチェックしていることがわかります。親ディレクトリが存在するため、true を返しています。

末尾のドットを切り落とさずに確認する方法があるかどうか知りたいですか?

Directory.Existsメソッドの結果が予想と異なる可能性があるシナリオはありますか?

更新: Windows エクスプローラーのアドレス バーに同じ文字列 "D:\test\..." を入力して Enter キーを押すと、そのようなディレクトリが見つからないことを識別できます。同様の動作を得る方法はありますか?

注: そのような名前のディレクトリが存在しないことはわかっていますが、ユーザーから入力文字列を取得しているため、このメソッドへの入力は何でもかまいません。

4

2 に答える 2

0

再び「D:\」ディスクに移動するためです。

エスケープ文字表現 "D:\test\..." は、"D" という名前のディスクを意味し、そこにあります。

ディスク文字を変更した場合。「存在しません」と表示されます。これがあなたの答えです。

D:\ --> D:\test --> .. コマンドを実行して、D:\ に戻ります。

「...」という名前のフォルダーを作成することはできません。「パラメーターが正しくありません」というエラーが表示されます。

于 2018-08-29T14:46:37.413 に答える