0

私が現在行っている方法ではなく、Directory.GetFiles と 'StartsWith'、'Contains' および 'EndsWith' を使用してファイル名をフィルタリングするより効率的な方法はありますか?

        _files = Directory.GetFiles(_path);

        if (!String.IsNullOrEmpty(_startsWith))
        {
            _files = _files.Where(x => x.StartsWith(_startsWith)).ToArray();
        }

        if (!String.IsNullOrEmpty(_contains))
        {
            _files = _files.Where(x => x.Contains(_contains)).ToArray();
        }

        if (!String.IsNullOrEmpty(_endsWith))
        {
            _files = _files.Where(x => x.EndsWith(_endsWith)).ToArray();
        }
4

3 に答える 3

2

Directory.EnumerateFiles()怠け者であり、そもそも完全なリストを作成する必要がないため、切り替える必要があります。

于 2013-03-05T12:30:08.083 に答える
0

次のオーバーロードが役立つと思います。

Directory.GetFiles(strPath, "*" + strFilter, SearchOption.TopDirectoryOnly); // to get behaviour of EndsWith

Directory.GetFiles(strPath, "*" + strFilter + "*", SearchOption.TopDirectoryOnly); // to get behaviour of Contains

Directory.GetFiles(strPath, strFilter + "*", SearchOption.TopDirectoryOnly); // to get behaviour of StartsWith
于 2013-03-05T12:10:44.523 に答える
0

すべてをLinqの単一行に詰め込もうとしている場合は、次のようなことを行うことができます。

_files = _files.Where(_ => !String.IsNullOrEmpty(_startsWith)).Where(x => x.StartsWith(_startsWith)).ToArray();

ただし、前述のように、Directory.GetFilesはほぼ確実にここのコードの中で最も遅い部分であり、読みやすいものを使用することをお勧めします。

于 2013-03-05T12:11:28.007 に答える