phil.o
Извините за позднее решение, но сегодня я был очень занят своими делами.
Вы можете попробовать:
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
// ...
// First retrieve all files in the hierarchy
IEnumerable<string> allFiles = Directory.EnumerateFiles(targetDirectory, "*.txt", SearchOptions.AllDirectories);
// Then isolate only those which are in the directory you are interested in
Regex r = new Regex(@".+\\[\d]+\\[\d]+\\[\d]+\\[\d]+\\[^\\]+\.txt", RegexOptions.Compiled | RegexOptions.IgnoreCase);
string[] files = allFiles.Where(f => r.IsMatch(f)).ToArray();
Регулярное выражение быстро строится, но я использовал
Экспрессо[
^] чтобы проверить это, и это кажется правильным.
Надеюсь, это поможет. Любезно.
[Edit]: Исправлена ошибка, когда я использовал метод Match вместо правильного метода IsMatch.
[Править 2]:
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
class YourClass
{
private static readonly Regex regex = new Regex(@".+\\[\d]+\\[\d]+\\[\d]+\\[\d]+\\[^\\]+\.txt", RegexOptions.Compiled | RegexOptions.IgnoreCase);
// ...
// In your method:
string[] files = Directory.EnumerateFiles(targetDirectory, "*.txt", SearchOptions.AllDirectories).Where(f => regex.IsMatch(f)).ToArray();
}
phil.o
Да, конечно. Если вы собираетесь использовать регулярное выражение более одного раза, я советую вам сделать его статической переменной класса, так как создание экземпляра регулярного выражения-довольно дорогостоящий процесс.
Я отредактирую свое решение через несколько минут и покажу вам, как это сделать.