LINQ делает это легко:
using System.IO;
using System.Linq;
...
File.WriteAllLines("output.txt",
File.ReadLines("input.txt")
.Where(line => !line.Contains("*")));
Или как два заявления - это все-таки лень, только чтение построчно:
var query = File.ReadLines("input.txt").Where(line => !line.Contains("*"));
File.WriteAllLines("output.txt", query);
Если вам обязательно нужно заменить исходный файл, вы можете либо использовать выше, а затем удалить исходный файл и переместить новый файл на место, или (если файл небольшой достаточно) читать весь файл, чтобы начать с:
var lines = File.ReadAllLines("file.txt").Where(line => !line.Contains("*"));
File.WriteAllLines("file.txt", lines);
Обратите внимание, что, потому что это использует ReadAllLines
вместо ReadLines
, он будет читать весь файл в память за один раз.
Предполагается, что вы используете .NET 4 или выше. Если вы используете только .NET 3.5, вы все равно можете использовать вторую форму, но вам нужно конвертировать результат в массив, прежде чем писать его:
var lines = File.ReadAllLines("file.txt")
.Where(line => !line.Contains("*"))
.ToArray();
File.WriteAllLines("file.txt", lines);
Где вы можете найти функцию для отображения строкового массива? – JeremyK
@JeremyK: Вам нужна директива 'using' для' System.Linq'. Добавьте это в ответ. –
Так рад, что я решил посмотреть сегодня, узнал что-то новое :) Спасибо, сэр. – JeremyK