我在编写文件时如何声明文件大小限制

时间:2014-09-17 17:00:42

标签: c#

我是C#的新手,想问一下如何为逗号分隔文件设置某个文件限制。我将使用它们的场景如下。

  1. 在编写CSV输出文件之前,我需要检查特定路径/驱动器上是否存在现有CSV文件
  2. 当该方法正在运行时,如何在超出文件大小限制(最好是500 MB文件大小的CSV)之前停止写入?
  3. 这是我正在使用的代码:

    if (!File.Exists(newFileName))
    {
        File.WriteAllText(newFileName, clientheader);
        //File.WriteAllText(logFileName, logfileheader);
    }
    else
    {
        File.AppendAllText(newFileName, clientheader);
        // File.AppendAllText(logFileName, logfileheader);
    }
    

2 个答案:

答案 0 :(得分:3)

您可以使用流( FileStream )来编写csv数据,并通过检查流的位置属性来检查当前大小。假设您在 allData 数组中有要写入csv文件的数据(例如Name,Age等),那么它应该像这样工作:

const int sizeLimitInBytes = 500*1024*1024;

using (var stream = new FileStream("data.csv", FileMode.Append))
using (var writer = new StreamWriter(stream))
{
    // if the file is newly created then write the csv column names in the first line
    if (stream.Position == 0) 
    {
       writer.WriteLine("Name, Age, Job, Address");
    }

    foreach (var currentData in allData)
    {
        if (stream.Position > sizeLimitInBytes)
        {
            break;
        }
        writer.WriteLine("..."); // write data seperated by commas
    }
}

使用 FileMode.Append 写入文件末尾(如果存在)。否则它会创建一个。

StreamWriter 使用缓冲(缓冲区大小为4千字节),因此检查是否超出限制不会完全准确,但对于500 MB的限制,它不会真的很重要。

如果您希望将所有内容一次写入文件,则可以使用 MemoryStream 而不是 FileStream ,然后使用 File.WriteAllBytes 将流的字节转储到文件中。

答案 1 :(得分:0)

我有一个类似的问题,创建的文件只有有限的字符。我找到了解决方案,并在创建文件时尝试了“ using”关键字。现在,将以最大大小创建文件。

using(StreamWriter sw = new StreamWriter(fs))
{
    ArrayList chartList = GetChart(maintNode);    
    foreach (var line in chartList)
    {
        sw.WriteLine(line);
    }
}

发件人:StreamWriter limit in C# in text file