更新时间:2023-01-30 19:14:42
可以在一个语句中完成一个文件
It can be done in one statement for one file
WriteAllLines("new file",
ReadLines("source file")
.Where(line => line.Lenth > 0 && Char.IsDigit(line[0]))
);
请注意,它在内部逐行工作,即一次内存中只有一行.从处理的输入中读取一行并将其写入输出,然后从下一行等等.这是因为这些方法与IEnumerable<string>
一起使用.例如,IEnumerable
不会像将文件读入数组那样缓冲整个文件.
Note that it works on a line-by-line basis internally, i.e. there will be only one line at a time in memory. One line will be read from input processed and written to the output, then the next line and so on. This is because these methods work with IEnumerable<string>
. IEnumerable
does not buffer the whole file as would be the case if you read the file into an array, for instance.
对于两个输出文件,您将不得不重复两次.因此,我建议采用以下方法,该方法只读取输入文件一次:
You would have to repeat this twice for the two output files. Therefore I suggest the following approach, which reads the input file only once:
using (var log = CreateText("log.txt"))
using (var result = CreateText("result.txt")) {
foreach (string line in ReadLines("source file")) {
if (line.Length > 0) {
if (Char.IsDigit(line[0])) {
result.WriteLine(line);
} else {
log.WriteLine(line);
}
}
}
}
第二种方法也不缓冲文件.
This second approach does not buffer the file either.