如何删除文本文件的第一行“X”?

时间:2009-10-03 23:13:06

标签: c# file-io rewrite

对于我正在做的项目,我必须做的一件事就是删除纯文本文件的第一行 X 行。我说 X 因为我需要多次执行此例程,每次删除的行都会有所不同,但是它们总是从头开始,删除第一个 X 然后将结果输出到同一个文件。

我正在考虑做这样的事情,我从其他教程和示例拼凑而成:

String line = null;

String tempFile = Path.GetTempFileName();
String filePath = openFileDialog.FileName;

int line_number = 0;
int lines_to_delete = 25;

using (StreamReader reader = new StreamReader(originalFile)) {
    using (StreamWriter writer = new StreamWriter(tempFile)) {
        while ((line = reader.ReadLine()) != null) {
            line_number++;

            if (line_number <= lines_to_delete)
                continue;

            writer.WriteLine(line);
        }
    }
}

if (File.Exists(tempFile)) {
    File.Delete(originalFile);
    File.Move(tempFile, originalFile);
}

但是我不知道这是否会起作用,因为从第0行开始的行号或者诸如此类的东西......还有,我不知道它在效率和形式方面是否是好的代码。

非常感谢。

4 个答案:

答案 0 :(得分:8)

我喜欢它......

File.WriteAllLines(
    fileName,
    File.ReadAllLines(fileName).Skip(numberLinesToSkip).ToArray());

答案 1 :(得分:6)

没关系,看起来不会有你担心的一个一个问题。然而,一个更精简的方法将由两个独立的循环提供 - 一个只计算输入文件中的前X行(并且不做任何其他操作),另一个只是将其他行从输入复制到输出。即,而不是单个while循环,有......:

    while ((line = reader.ReadLine()) != null) {
        line_number++;

        if (line_number > lines_to_delete)
            break;
    }

    while ((line = reader.ReadLine()) != null) {
        writer.WriteLine(line);
    }

答案 2 :(得分:2)

我喜欢你的方法,我认为没有错。如果您确定它们是小文件,那么其他建议可能会少一些,如果这对您来说很重要。

您已经拥有的略微冗长的版本:

using (StreamReader reader = new StreamReader(originalFile))
using (StreamWriter writer = new StreamWriter(tempFile))
{
    while(lines_to_delete-- > 0)
        reader.ReadLine();
    while ((line = reader.ReadLine()) != null)
        writer.WriteLine(line);
}

答案 3 :(得分:0)

您可以将文件读入一个行数组,忽略前几个元素,然后将其余部分写回来。

这种方法的缺点是它会消耗内存中文件的大小。你的方法(虽然非常难以理解,没有进攻)没有这个记忆问题。虽然文件不是太大,但是没有理由担心内存使用情况。

示例:

string[] lines = System.IO.File.ReadAllLines("YourFile.txt").Skip(10).ToArray();
System.IO.File.WriteAllLines("OutFile.txt", lines);