如何将文件截断到一定的大小但保留结束部分?

Ror*_*ory 9 .net c# text-files

我有一个文本文件随着时间的推移附加,并定期我想将其截断到一定的大小,例如10MB,但保留最后10MB而不是第一个.

有没有聪明的方法来做到这一点?我猜我应该寻找正确的点,从那里读到一个新文件,删除旧文件并将新文件重命名为旧名称.有更好的想法或示例代码吗?理想情况下,我不会将整个文件读入内存,因为文件可能很大.

请不要使用Log4Net等建议

Ry-*_*Ry- 4

如果您可以将最后 10MB 读入内存,那么这应该可以工作:

using(MemoryStream ms = new MemoryStream(10 * 1024 * 1024)) {
    using(FileStream s = new FileStream("yourFile.txt", FileMode.Open, FileAccess.ReadWrite)) {
        s.Seek(-10 * 1024 * 1024, SeekOrigin.End);
        s.CopyTo(ms);
        s.SetLength(10 * 1024 * 1024);
        s.Position = 0;
        ms.Position = 0; // Begin from the start of the memory stream
        ms.CopyTo(s);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • +1 在最终的 CopyTo() 之前可能还需要 ms.Position = 0 (我使用了另一个 FileStream 而不是 MemoryStream) (4认同)
  • 在执行此操作之前,您还需要确保文件(“yourFile.txt”)长度超过 10 MB。否则你会得到一个异常,告诉你你正试图寻求消极的立场。 (3认同)