Уже есть пара хороших постов о том, как получить строки файла, поэтому я подумал, что немного добавлю об эффективности. Несколько человек упомянули метод File.ReadAllLines (). Этот метод проблематичен с точки зрения эффективности, поскольку он будет считывать весь файл в память за один раз. Кроме того, он использует массив в качестве хранилища, которое требует непрерывной памяти. Если файл достаточно большой, это вызовет проблемы.
Более эффективный способ чтения файлов - это повторное использование метода StreamReader.ReadLine. Он будет возвращать строки по одной за раз, и вам нужно только сохранить строки, которые вам нужны, в памяти. Это также относительно легко превратить в итератор с задержкой.
public static IEnumerable<string> ReadLinesEnumerable(string path) {
using ( var reader = new StreamReader(path) ) {
var line = reader.ReadLine();
while ( line != null ) {
yield return line;
line = reader.ReadLine();
}
}
}
С точки зрения LINQ. Вы можете использовать LINQ для одинакового совпадения как с ReadAllLines, так и с методом ReadLinesEnumerable, поскольку оба возвращают перечислимый тип данных. Например
var query = from line in ReadLinesEnumerable(@"c:\some\path\file.txt")
where Regex.IsMatch(line, @"^(\d)+.*$")
select line;