【问题标题】:limit size of text file without using log4net or NLog在不使用 log4net 或 NLog 的情况下限制文本文件的大小
【发布时间】:2013-11-25 14:38:43
【问题描述】:

我正在开发一个 winForm 应用程序,其中有一个用于记录目的的文本文件。我想将其大小限制为 3 MB,以便如果超过此限制并写入新数据,则删除文本文件中最旧的数据以为新数据腾出空间。有什么有用的建议吗?

我知道我们有一些日志框架(例如 NLog 或 log4net,都可以从 NuGet 获得),它提供滚动日志文件功能。但我不想使用它,因为我在整个项目中只有一个文本文件。

我想从文件开头开始读取,删除一些数据,然后在末尾追加新数据。

谢谢

【问题讨论】:

  • 打开日志文件时,您可以获取其大小并在达到限制时采取措施
  • but i dont want to use it as I have just one text file in the whole project 当然大多数情况下每个人都只使用一个日志文件。为什么这会迫使你重新发明轮子?
  • 是的,我知道。你的意思是FileInfi.Length。但是如何从文件开头删除文本
  • 您不能在文本文件中进行随机访问。或者读取整个文件并更改您想要的行,或者在您读取的每一行时将其写入一个新文件(更改您需要的文件) ) 然后替换它,或者使用 xml 的全新方法...
  • 据我了解,处理文件中的“现有”文本是一个相对昂贵的过程。简单地附加它不是问题,但如果你想删除前 10 行,然后附加,它会变得有点困难(参见 Roy Dictus 的回答)。为什么不想使用现有的日志框架?

标签: c# winforms logging text-files


【解决方案1】:

滚动日志文件并不意味着删除文本文件中最旧的数据。意思是经过一定时间或一定文件大小后,会创建一个新的日志文件。

文本文件不能删除,它们是顺序文件。因此,如果要从文本文件中删除一行,则必须读取该文件,从内存中删除该行并再次覆盖该文件,或者创建一个新文件并将每行复制到它,跳过那些你想“删除”。

【讨论】:

    猜你喜欢
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多