且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何将特定行从一个文件复制到另一个文件?

更新时间: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.