设置文本文件的限制

时间:2013-11-15 12:24:32

标签: c# text-files

我正在为文本文件写行。有没有办法限制文本文件中的最大行数。所以我不允许在那个限制之后写字。

如果我在最大线路限制后继续写入,则删除最旧的写入行以容纳新添加的行。

3 个答案:

答案 0 :(得分:3)

有...但你不应该打它......如果你......好吧,也许你正在寻找一个文本文件。

大小方面,文件有不同的限制,具体取决于你的文件系统...... NTFS(差不多16TB),FAT(胖32几乎是4GB),unix文件系统将有其局限性等等......

就像他们建议的那样,你的限制将是文件的大小。


至于你的评论:
您可以将限制设置为您想要的任何值。 你所做的就取决于你...如果你决定覆盖该文件,它将删除并重新开始。如果你决定追加,它会附加到最后。

我建议创建一个包含100个字符串的队列,如果你推送新的字符串,则删除队列中的最后一个字符串。然后你就可以让那个类随时随地保存日志。

答案 1 :(得分:1)

像这样创建自己的方法

public void writeLines(string filePath,string[] lines,int limit)
{
    var buffer=Enumerable.Empty<string>();
    if(File.Exists(filePath))
        buffer=File.ReadAllLines(path);
    File.WriteAllLines(filePath,lines);
    int range=limit-lines.Length+buffer.Count;
    File.AppendAllLines(filePath,buffer.Take(range));
}

答案 2 :(得分:0)

第一个问题的答案很简单:

  • 了解您的存储限制。
  • 了解您当前的文件大小。
  • 如果新行的长度加上当前文件大小超过存储限制,请不要追加它。

现在,第二种有点棘手。正如该线程的几位参与者所指出的那样,逐行阈值操作可能非常昂贵。

让我们做一些餐巾模拟,并假设您在每个Append插入1024字节(1KB),并且您的存储限制为1GB。插入最后一行(n.1048576)后,您决定需要删除第一行。有几种方法可以实现这一点,但是大多数方法都涉及加载整个集合减去其他地方的初始行(内存,磁盘,你命名)和附加新行。不完全是最实用的方法 - 你只需要添加它就可以操作比想要添加的内容大一百万倍的堆栈。

解决方案1 ​​

  • 光标缓冲区
    • 在我们的示例中,您有1048576个可能的条目(1GB文件上的1KB记录)。
    • 开始填写;将当前位置(光标)保存在别处。
    • 达到限制后,光标会重置;你覆盖位置0,然后是1,依此类推。
    • 优点:磁盘成本非常低。
    • 缺点:您需要在某处跟踪当前光标。

解决方案2

  • 文字块
    • 假设此示例为1GB存储空间,最大为1MB文件。
    • 开始填写文件#0。
    • 一旦达到1MB,关闭它。打开文件#1。冲洗并重复。
    • 填写文件#1023(最终达到1GB)后,删除最旧的文件(#0)。创建文件#1024。继续你的记录。
    • 优点:操作成本低 - 您只运行一次删除操作。
    • 缺点:您不只删除一个条目 - 您删除整个块。