如何在编写文件时声明文件大小限制
本文关键字:声明 文件大小 文件 | 更新日期: 2023-09-27 18:22:17
我对C#还很陌生,我想问一下如何为逗号分隔的文件设置特定的文件限制。我将使用它们的场景如下。
- 在编写CSV输出文件之前,我需要检查特定路径/驱动器上是否存在现有的CSV文件
- 当该方法正在运行时,我如何使它在超过其文件大小限制(最好是500 MB的CSV文件大小)之前停止写入
这是我目前使用的代码:
if (!File.Exists(newFileName))
{
File.WriteAllText(newFileName, clientheader);
//File.WriteAllText(logFileName, logfileheader);
}
else
{
File.AppendAllText(newFileName, clientheader);
// File.AppendAllText(logFileName, logfileheader);
}
您可以使用流(FileStream)来写入csv数据,并通过检查流的Position属性来检查当前大小。假设您在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 KB),因此检查是否超过限制并不完全准确,但对于500 MB的限制来说,这并不重要。
如果您希望将所有内容一次性写入文件,则可以使用MemoryStream而不是FileStreamile.WriteAllBytes将流的字节转储到文件中。
我也遇到过类似的问题,创建的文件只有有限的字符。我找到了解决方案,并在创建文件时尝试了"using"关键字。现在创建的文件具有最大大小。
using(StreamWriter sw = new StreamWriter(fs))
{
ArrayList chartList = GetChart(maintNode);
foreach (var line in chartList)
{
sw.WriteLine(line);
}
}
发件人:文本文件中C#中的StreamWriter限制