C# 设置文本文件的限制

C# 设置文本文件的限制,c#,text-files,C#,Text Files,我正在向文本文件中写入行。有没有办法限制文本文件中的最大行数。这样我就不允许在这个限制之后写作了 或 如果我在最大行限制后继续写入,最早写入的行将被删除以容纳新添加的行。有。。。但你不应该打它。。。如果你是。。。嗯,也许你找的不是文本文件 就大小而言,文件有不同的限制,具体取决于您的文件系统。。。NTFS(几乎16TB)、FAT(FAT32几乎4GB)、unix文件系统将有其局限性,等等 以下是关于尺寸的答案: 正如他们所建议的,您的限制将是文件的大小 至于您的评论: 你可以根据自己的意愿

我正在向文本文件中写入行。有没有办法限制文本文件中的最大行数。这样我就不允许在这个限制之后写作了


如果我在最大行限制后继续写入,最早写入的行将被删除以容纳新添加的行。

有。。。但你不应该打它。。。如果你是。。。嗯,也许你找的不是文本文件

就大小而言,文件有不同的限制,具体取决于您的文件系统。。。NTFS(几乎16TB)、FAT(FAT32几乎4GB)、unix文件系统将有其局限性,等等

  • 以下是关于尺寸的答案:
正如他们所建议的,您的限制将是文件的大小


至于您的评论:
你可以根据自己的意愿设定限制。 那么你该怎么做取决于你。。。如果您决定覆盖该文件,它将删除并重新启动。如果您决定追加,它将追加到末尾


我建议创建一个包含100个字符串的队列,如果您推送新字符串,请删除队列中的最后一个字符串。然后,您可以让该类在任何时候、任何地点、以任何方式保存日志。

有。。。但你不应该打它。。。如果你是。。。嗯,也许你找的不是文本文件

就大小而言,文件有不同的限制,具体取决于您的文件系统。。。NTFS(几乎16TB)、FAT(FAT32几乎4GB)、unix文件系统将有其局限性,等等

  • 以下是关于尺寸的答案:
正如他们所建议的,您的限制将是文件的大小


至于您的评论:
你可以根据自己的意愿设定限制。 那么你该怎么做取决于你。。。如果您决定覆盖该文件,它将删除并重新启动。如果您决定追加,它将追加到末尾


我建议创建一个包含100个字符串的队列,如果您推送新字符串,请删除队列中的最后一个字符串。然后,您可以让该类在任何时候、任何地点、以任何方式保存日志。

创建您自己的方法,如下所示

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));
}
public void writeLines(字符串文件路径、字符串[]行、整数限制)
{
var buffer=Enumerable.Empty();
if(File.Exists(filePath))
buffer=File.ReadAllLines(路径);
writeAllines(文件路径,行);
int range=限制行数.Length+buffer.Count;
AppendAllLines(filePath,buffer.Take(range));
}

像这样创建自己的方法

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));
}
public void writeLines(字符串文件路径、字符串[]行、整数限制)
{
var buffer=Enumerable.Empty();
if(File.Exists(filePath))
buffer=File.ReadAllLines(路径);
writeAllines(文件路径,行);
int range=限制行数.Length+buffer.Count;
AppendAllLines(filePath,buffer.Take(range));
}

第一个问题的答案非常简单:

  • 了解您的存储限制
  • 了解您当前的文件大小
  • 如果新行的长度加上当前文件大小超过存储限制,则不要追加它
现在,第二个有点棘手。正如该线程中的几个参与者所指出的,逐行阈值操作可能非常昂贵

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

解决方案1

  • 光标缓冲区
    • 在我们的示例中,您有1048576个可能的条目(1GB文件中的1KB记录)
    • 开始加油;将当前位置(光标)保存到其他位置
    • 一旦达到极限,光标将重置;覆盖位置0,然后覆盖位置1,依此类推
    • 优点:非常低的磁盘成本
    • 缺点:您需要在某个地方跟踪当前光标
解决方案2

  • 文本块
    • 在本例中,假设存储容量为1GB,最大文件容量为1MB
    • 开始填充文件0
    • 一旦达到1MB,关闭它。打开文件#1。冲洗并重复
    • 填充完文件#1023(从而达到最大1GB)后,删除最旧的文件(#0)。创建文件#1024。继续您的日志记录
    • 优点:操作成本低-您只需运行一个删除操作
    • 缺点:你不会只删除一个条目-你会删除整个块

    • 第一个问题的答案非常简单:

      • 了解您的存储限制
      • 了解您当前的文件大小
      • 如果新行的长度加上当前文件大小超过存储限制,则不要追加它
      现在,第二个有点棘手。正如该线程中的几个参与者所指出的,逐行阈值操作可能非常昂贵

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

      解决方案1

      • 光标缓冲区
        • 在我们的示例中,您有1048576个可能的条目(1GB文件中的1KB记录)
        • 开始填充