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 回答