1. ホーム
  2. c#

[解決済み] System.IO.Directory.GetFilesで複数のファイル拡張子のsearchPatternを使用する。

2022-03-09 09:17:36

質問

を設定するための構文を教えてください。 複数のファイル拡張子 として searchPattern オン Directory.GetFiles() ? を含むファイルをフィルタリングする場合 .aspx .ascx 拡張子を使用します。

// TODO: Set the string 'searchPattern' to only get files with
// the extension '.aspx' and '.ascx'.
var filteredFiles = Directory.GetFiles(path, searchPattern);

更新情報 : LINQはオプションではありません である必要があります。 searchPattern に渡されます。 GetFiles のように、質問で指定されています。

解決方法は?

Directory.GetFilesメソッドの制限事項であるため、すぐに解決できる方法はないと思います。

しかし、独自のメソッドを書くのはかなり簡単で、次のようなものがあります。 .

というコードになる可能性があります。

/// <summary>
/// Returns file names from given folder that comply to given filters
/// </summary>
/// <param name="SourceFolder">Folder with files to retrieve</param>
/// <param name="Filter">Multiple file filters separated by | character</param>
/// <param name="searchOption">File.IO.SearchOption, 
/// could be AllDirectories or TopDirectoryOnly</param>
/// <returns>Array of FileInfo objects that presents collection of file names that 
/// meet given filter</returns>
public string[] getFiles(string SourceFolder, string Filter, 
 System.IO.SearchOption searchOption)
{
 // ArrayList will hold all file names
ArrayList alFiles = new ArrayList();

 // Create an array of filter string
 string[] MultipleFilters = Filter.Split('|');

 // for each filter find mathing file names
 foreach (string FileFilter in MultipleFilters)
 {
  // add found file names to array list
  alFiles.AddRange(Directory.GetFiles(SourceFolder, FileFilter, searchOption));
 }

 // returns string array of relevant file names
 return (string[])alFiles.ToArray(typeof(string));
}