56833

[code]

    public static string[] GetFiles(string path, string searchPattern, SearchOption searchOption)
    
[/code]

メソッドのsearchPatternにstring.Emptyを指定した場合にどのような挙動になるか  
ご存知の方がおりましたら教えてください。

1件もヒットしない認識で良いでしょうか。


CC BY-SA 4.0
2019-07-23T04:20:12.997
56829
2019-07-23T22:47:10.577
2019-07-23T22:47:10.577
4236
9228
question
c#
System.IO.Directory.GetFiles の引数SearchPattern未指定時の動作について


今実験したら@sayuriさんの回答のように、.NET 4.7.2ではstringの空配列、.NET Core
2.1ではSrarchOptionにより該当フォルダだけか、あるいは配下のフォルダも含めたファイル一覧が返ってきました。  
まあ、資料は良く読むのと、簡単なことは実験してみるのが早いですね。

* * *

ArgumentExceptionが発生するのでは？ string.EmptyではなくnullだとArgumentNullExceptionですね。

[GetFiles(String, String, SearchOption)](https://docs.microsoft.com/ja-
jp/dotnet/api/system.io.directory.getfiles?view=netframework-4.8#System_IO_Directory_GetFiles_System_String_System_String_System_IO_SearchOption_)

> **例外**  
>  [ArgumentException](https://docs.microsoft.com/ja-
> jp/dotnet/api/system.argumentexception?view=netframework-4.8)  
>  `path` は長さ 0 の文字列で、空白のみで構成されているか、または 1 つ以上の正しくない文字を含んでいます。
> [GetInvalidPathChars()](https://docs.microsoft.com/ja-
> jp/dotnet/api/system.io.path.getinvalidpathchars?view=netframework-4.8#System_IO_Path_GetInvalidPathChars)
> を使用して、正しくない文字を検出するクエリを実行できます。  
>  **\- または -`searchPattern` には有効なパターンが含まれていません。**
>
> [ArgumentNullException](https://docs.microsoft.com/ja-
> jp/dotnet/api/system.argumentnullexception?view=netframework-4.8)  
>  `path` または `searchpattern` が `null` です。


CC BY-SA 4.0
2019-07-23T04:35:09.947
56830
2019-07-23T05:07:00.077
2019-07-23T05:07:00.077
26370
26370
56829
answer


[`Directory.GetFiles`のドキュメント](https://docs.microsoft.com/ja-
jp/dotnet/api/system.io.directory.getfiles?view=netframework-4.8#System_IO_Directory_GetFiles_System_String_System_String_System_IO_SearchOption_)では`String.Empty`を指定した際の挙動について言及していません。そのため、どのような挙動になるかは不定と考えるべきです。つまり、現時点で空配列が得られたとして今後も同じ結果になるとは限りません。であれば`String.Empty`での呼び出しは避けるべきです。

* * *

ソースコードを読む限り

  * [.NET Frameworkでは空配列](https://github.com/microsoft/referencesource/blob/e0bf122d0e52a42688b92bb4be2cfd66ca3c2f07/mscorlib/system/io/filesystemenumerable.cs#L207-L210)
  * [.NET Coreではファイル一覧（`*`相当）](https://github.com/dotnet/corefx/blob/dd3ad315e64a40f5954e96793cdecd61d1173aa7/src/System.IO.FileSystem/src/System/IO/Enumeration/FileSystemEnumerableFactory.cs#L71-L81)

と挙動が異なります。.NET Coreなら関係ない…とは言えなくなっています。.NET Frameworkは4.8までであり、.NET
Coreが今後.NET 5となることが宣言されているため、そのタイミングで挙動が切り替わることを意味します。


CC BY-SA 4.0
2019-07-23T04:40:48.663
56833
2019-07-23T22:41:08.203
2019-07-23T22:41:08.203
4236
4236
56829
answer