我有一个文本文件,随着时间的推移,我会定期将其截断到某个大小,例如10MB,但保留最后10MB而不是第一个。
有什么聪明的方法可以做到这一点吗?我猜我应该找到正确的点,从那里读取到一个新文件,删除旧文件,并将新文件重命名为旧名称。有更好的想法或示例代码吗?理想情况下,我不会将整个文件读取到内存中,因为文件可能会很大。
请不要建议使用Log4Net等。
发布于 2012-06-17 23:33:13
如果您只需将最后的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);
}
}https://stackoverflow.com/questions/11072473
复制相似问题