Combining file filters in Directory.GetFiles()
The Directory.GetFiles() method in .NET provides a convenient way to retrieve a list of files matching a specific filter. However, when trying to filter multiple file types, the default behavior is to retrieve only files matching the first filter.
Despite trying combinations like ".mp3|.jpg" and ".mp3;.jpg", none of these methods capture this in one call Two file types. To work around this limitation, consider the following alternatives:
For .NET 4.0 and above:
Implement a LINQ query to filter the results of Directory.EnumerateFiles(), which retrieves all file paths in a directory. The query filters specific file extensions (.mp3 and .jpg).
<code class="language-csharp">var files = Directory.EnumerateFiles("C:\path", "*.*", SearchOption.AllDirectories) .Where(s => s.EndsWith(".mp3") || s.EndsWith(".jpg"));</code>
For earlier versions of .NET:
Use the Directory.GetFiles() method to retrieve files matching any extension (.) and apply a LINQ query to filter the results.
<code class="language-csharp">var files = Directory.GetFiles("C:\path", "*.*", SearchOption.AllDirectories) .Where(s => s.EndsWith(".mp3") || s.EndsWith(".jpg"));</code>
Note: Please consider the suggestion in the comments about using the StringContains function instead of the EndsWith function to optimize performance. Additionally, please be aware of possible memory issues when using the EnumerateFiles() method, where the allocated memory limit may be exceeded if the underlying object is not released first.
The above is the detailed content of How Can I Combine Multiple File Filters in Directory.GetFiles()?. For more information, please follow other related articles on the PHP Chinese website!