我正在为文本文件写行。有没有办法限制文本文件中的最大行数。所以我不允许在那个限制之后写字。
或
如果我在最大线路限制后继续写入,则删除最旧的写入行以容纳新添加的行。
答案 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
解决方案2