web-dev-qa-db-ja.com

フォルダー内で特定の拡張子を持つファイルを見つける

フォルダーパス(C:\Random Folderなど)が指定されている場合、txtなどの特定の拡張子を持つファイルを見つけるにはどうすればよいですか?ディレクトリで*.txtを検索する必要があると思いますが、最初にこの検索を開始する方法がわからない。

87
Dominic K

System.IO.Directoryクラスと静的メソッドGetFilesを見てください。パスと検索パターンを受け入れるオーバーロードがあります。例:

 string[] files = System.IO.Directory.GetFiles(path, "*.txt");
162
Anthony Pegram

Directory クラスを使用できます

 Directory.GetFiles(path, "*.txt", SearchOption.AllDirectories)
27
sgriffinusa

実際には非常に簡単です。 System.IO.Directory クラスを System.IO.Path と組み合わせて使用​​できます。次のようなもの(LINQを使用するとさらに簡単になります):

var allFilenames = Directory.EnumerateFiles(path).Select(p => Path.GetFileName(p));

// Get all filenames that have a .txt extension, excluding the extension
var candidates = allFilenames.Where(fn => Path.GetExtension(fn) == ".txt")
                             .Select(fn => Path.GetFileNameWithoutExtension(fn));

もちろん、この手法には多くのバリエーションがあります。フィルターがより単純な場合、他の答えのいくつかはより単純です。これには、遅延列挙(重要な場合)と、より多くのコードを犠牲にしてより柔軟なフィルタリングの利点があります。

14
Greg D

以下のメソッドは、特定の拡張子を持つファイルのみを返します(例:.txtでなく.txt1のファイル)

public static IEnumerable<string> GetFilesByExtension(string directoryPath, string extension, SearchOption searchOption)
    {
        return
            Directory.EnumerateFiles(directoryPath, "*" + extension, searchOption)
                .Where(x => string.Equals(Path.GetExtension(x), extension, StringComparison.InvariantCultureIgnoreCase));
    }
3
hazjack

私の理解によると、これは2つの方法で行うことができます:

1)GetfilesメソッドでDirectoryクラスを使用し、すべてのファイルを走査して、必要な拡張子を確認できます。

Directory.GetFiles( "your_folder_path)[i] .Contains(" *。txt ")

2)パラメーターとしてファイルパスを取得し、拡張子を検証するGetExtensionメソッドでパスクラスを使用できます。ファイルパスを取得するには、単一のファイルをフェッチし、検証に使用できるファイルパスを返すループ条件を設定するだけです。

Path.GetExtension(your_file_path).Equals( "。json")

注:両方のロジックがループ条件内にある必要があります。

0
Pulkit Shah