如何删除文本文件中的最后一行?

Jav*_*oob 10 c# line

我有.txt的扩展与从第三方程序生成的日志文件,每次该文本文件的最后一个空白行一个简单的日志文本文件.

因此,我可以使用任何方法或代码来删除文本文件的最后一行吗?

日志文本文件的示例:

Sun Jul 22 2001 02:37:46,73882,...b,r/rrwxrwxrwx,0,0,516-128-3,C:/WINDOWS/Help/digiras.chm
Sun Jul 22 2001 02:44:18,10483,...b,r/rrwxrwxrwx,0,0,480-128-3,C:/WINDOWS/Help/cyycoins.chm
Sun Jul 22 2001 02:45:32,10743,...b,r/rrwxrwxrwx,0,0,482-128-3,C:/WINDOWS/Help/cyzcoins.chm
Sun Jul 22 2001 04:26:14,174020,...b,r/rrwxrwxrwx,0,0,798-128-3,C:/WINDOWS/system32/spool/drivers/color/kodak_dc.icm
Run Code Online (Sandbox Code Playgroud)

dec*_*one 21

怎么样的:

var lines = System.IO.File.ReadAllLines("...");
System.IO.File.WriteAllLines("...", lines.Take(lines.Length - 1).ToArray());
Run Code Online (Sandbox Code Playgroud)

说明:

从技术上讲,您不会从文件中删除一行.您读取文件的内容并将其写回,不包括要删除的内容.

这段代码的作用是将所有行读入一个数组,然后将这些行写回文件,只排除最后一行.(Take()方法(LINQ的一部分)采用指定的行数,在我们的例子中,长度为1).在这里,var lines可以读作String[] lines.

  • File.ReadAllLines 对于小文件来说很好,但是如果文件包含一百万行,您真的想使用它吗? (2认同)

Mig*_*ell 10

使用此方法删除文件的最后一行:

public static void DeleteLastLine(string filepath)
{
    List<string> lines = File.ReadAllLines(filepath).ToList();

    File.WriteAllLines(filepath, lines.GetRange(0, lines.Count - 1).ToArray());

}
Run Code Online (Sandbox Code Playgroud)

编辑:已实现先前不存在的行变量,因此我更新了代码.


ARr*_*igo 6

如果您想从文件中删除最后 N 行而不将所有行加载到内存中

int numLastLinesToIgnore = 10;
string line = null;
Queue<string> deferredLines = new Queue<string>();
using (TextReader inputReader = new StreamReader(inputStream))
using (TextWriter outputReader = new StreamWriter(outputStream))
{
    while ((line = inputReader.ReadLine()) != null)
    {
        if (deferredLines.Count() == numLastLinesToIgnore)
        {
            outputReader.WriteLine(deferredLines.Dequeue());
        }

        deferredLines.Enqueue(line);
    }
    // At this point, lines still in Queue get lost and won't be written
}
Run Code Online (Sandbox Code Playgroud)

发生的情况是,您缓冲队列中具有维度的每个新行numLastLinesToIgnore,并从其中弹出一行,仅当队列已满时才写入。您实际上预读了文件,并且可以numLastLinesToIgnore在到达文件末尾之前停止行,而无需提前知道总行数

请注意,如果文本小于numLastLinesToIgnore,则结果为空。

我想出了它作为一个镜像解决方案: 从文本文件中删除特定行?