C#导入数据到csv并且可以累加导入,当csv内存大于10MB时重新生成一个CSV继续导入
时间: 2024-11-09 22:29:26 浏览: 6
C#中csv文件与DataTable互相导入处理实例解析
在C#中,处理大文件尤其是CSV数据时,为了防止内存溢出,通常会采用逐行读取和写入的方式,而不是一次性将整个文件加载到内存中。你可以使用`StreamReader`逐行读取CSV,然后使用`StreamWriter`一行行地写入新的CSV文件。当你检测到当前CSV文件大小接近10MB时,就关闭并创建一个新的CSV文件。
以下是一个简单的示例,展示了如何遍历CSV文件并进行累加导入:
```csharp
using System;
using System.IO;
using System.Text;
// 定义文件操作的最大限制
const int MaxFileSize = 10 * 1024 * 1024; // 10MB
void ImportData(string sourceCsv, string destinationCsv)
{
using (var reader = new StreamReader(sourceCsv))
{
var buffer = new StringBuilder();
int currentFileSize = 0;
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
if (buffer.Length + line.Length > MaxFileSize)
{
SaveToFile(buffer.ToString(), destinationCsv);
buffer.Clear(); // 重置缓冲区
currentFileSize = 0;
}
buffer.AppendLine(line); // 累加每一行
currentFileSize += line.Length;
}
// 如果还有剩余的数据,也需要保存一次
if (buffer.Length > 0)
SaveToFile(buffer.ToString(), destinationCsv);
}
}
private void SaveToFile(string data, string fileName)
{
try
{
using (var writer = new StreamWriter(fileName, true)) // 使用追加模式
{
writer.Write(data);
}
}
catch (IOException ex)
{
Console.WriteLine($"Error writing to file: {ex.Message}");
}
}
```
在这个例子中,`ImportData`函数会持续读取源CSV文件,直到达到10MB限制或文件结束。当超过限制时,它会创建一个新的CSV文件并保存已读取的部分,然后再继续读取下一部分。
阅读全文