如何在C#程序中,计算得到一些数据,现在要将该数据保存到csv文件中,csv文件定义一个表头结果依次追加,下一次再做是仍然追加,直到该csv文件内存达到10MB时,自动重命名一个csv文件写入该新的csv文件中
时间: 2024-11-09 18:29:20 浏览: 16
在C#中,你可以使用`StreamWriter`和`StringBuilder`结合循环结构来处理这种情况。这里是一个简化版的示例,演示了如何实现数据追加到CSV文件,并在文件大小超过10MB时重命名并写入新文件。假设你的数据存储在一个集合或列表中,名为`dataList`,每个元素都是需要写入CSV的一行内容,表头已经存在于第一个文件中。
```csharp
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.IO.Compression; // 引入用于压缩文件
// 定义文件操作的最大限制
const int MaxFileSize = 10 * 1024 * 1024; // 10MB
const string CurrentFileExtension = ".csv";
const string BackupFileExtension = "_backup.csv";
class CSVWriter
{
private string filePath;
private long fileSize;
private List<string> dataList;
public CSVWriter(string baseFileName, List<string> data)
{
filePath = $"{baseFileName}{CurrentFileExtension}";
dataList = data;
fileSize = 0;
}
public void WriteToCSV()
{
// 检查文件是否存在及大小
if (!File.Exists(filePath) || (fileSize >= MaxFileSize && !IsBackupExists()))
{
WriteToNewFile();
}
using (var sw = new StreamWriter(filePath, false)) // 写入模式为追加
{
foreach (string row in dataList)
{
sw.WriteLine(row); // 写入数据行
fileSize += Encoding.UTF8.GetByteCount(row) + Environment.NewLine.Length; // 更新文件大小
if (fileSize >= MaxFileSize) break; // 当超过限制则停止
}
}
}
private bool IsBackupExists()
{
return File.Exists($"{filePath}{BackupFileExtension}");
}
private void WriteToNewFile()
{
if (IsBackupExists()) // 如果有备份文件,先删除旧备份
File.Delete($"{filePath}{BackupFileExtension}");
// 创建一个备份文件名
string backupPath = $"{filePath}{BackupFileExtension}";
// 将现有数据压缩到临时文件
using (FileStream fs = File.Open(backupPath, FileMode.Create, FileAccess.Write))
{
using (DeflateStream deflateStream = new DeflateStream(fs, CompressionLevel.Optimal))
{
byte[] dataBuffer = Encoding.UTF8.GetBytes(File.ReadAllText(filePath));
deflateStream.Write(dataBuffer, 0, dataBuffer.Length);
}
}
// 删除旧文件
File.Delete(filePath);
// 再次尝试写入新的CSV文件
WriteToCSV();
}
}
public class Program
{
static void Main()
{
// 假设你的数据在这里...
List<string> dataList = ...;
CSVWriter csvWriter = new CSVWriter("MyData", dataList);
csvWriter.WriteToCSV();
}
}
```
在这个示例中,如果CSV文件的大小超过10MB,它首先会创建一个备份文件,然后重命名为`.csv_backup.csv`。接着,它会清空原文件并继续写入数据,直到文件大小再次小于限制。
阅读全文