.csv文件c#
时间: 2025-03-07 16:11:56 浏览: 11
C# 中 CSV 文件的读写操作
读取 CSV 文件并将其转换为 DataTable
为了高效地处理 CSV 文件,在 C# 中可以利用 Microsoft.VisualBasic.FileIO.TextFieldParser
或者第三方库如 CsvHelper 来解析文件。这里展示一种不依赖额外包的方法,通过自定义逻辑来完成。
using System;
using System.Data;
using System.IO;
public static DataTable ReadCsvToDataTable(string filePath)
{
var dataTable = new DataTable();
using (var reader = new StreamReader(filePath))
{
string line;
bool isFirstRow = true;
while ((line = reader.ReadLine()) != null)
{
var values = line.Split(',');
if (isFirstRow)
{
foreach (string value in values)
dataTable.Columns.Add(value);
isFirstRow = false;
}
else
{
DataRow row = dataTable.NewRow();
for (int i = 0; i < values.Length && i < dataTable.Columns.Count; ++i)
row[i] = values[i];
dataTable.Rows.Add(row);
}
}
}
return dataTable;
}
此函数会打开指定路径下的 CSV 文件,并逐行读取其内容。对于首行,默认认为是列头;后续各行则作为实际的数据记录被加入到 DataTable
对象中[^1]。
将 DataTable 写入 CSV 文件
同样地,当需要保存数据表中的信息回 CSV 文件时,可以通过下面的方式实现:
public static void WriteDataTableToCsv(DataTable dt, string outputPath)
{
StringBuilder sb = new StringBuilder();
// 添加标题行
IEnumerable<string> columnNames = dt.Columns.Cast<DataColumn>().
Select(column => column.ColumnName);
sb.AppendLine(string.Join(",", columnNames));
// 遍历每一行并将它们添加到StringBuilder对象里
foreach (DataRow row in dt.Rows)
{
List<string> fields = new List<string>();
foreach (DataColumn column in dt.Columns)
{
string field = row[column].ToString().Replace("\"", "\"\"");
fields.Add(field.Contains(",") ? $"\"{field}\"" : field);
}
sb.AppendLine(string.Join(",", fields));
}
File.WriteAllText(outputPath, sb.ToString());
}
这段代码先构建了一个包含所有列名称的字符串表示形式,接着遍历每一条记录,确保任何含有逗号的内容都被适当包裹起来以免破坏格式结构,最后将整个结果一次性写出到目标位置。
处理 CSV 文件的相关辅助功能
除了基本的读写外,还可能涉及到其他一些常见的需求,例如修改文件名、设置编码方式等。这些都可以借助 .NET Framework 提供的基础 IO 类轻松达成。例如更改文件名为当前日期加上原文件扩展名:
public static string RenameFileWithDate(string originalFilePath)
{
FileInfo fileInfo = new FileInfo(originalFilePath);
string directoryName = Path.GetDirectoryName(fileInfo.FullName);
string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileInfo.Name);
string extension = fileInfo.Extension;
string newName = $"{fileNameWithoutExtension}_{DateTime.Now:yyyyMMddHHmmss}{extension}";
string newPath = Path.Combine(directoryName ?? "", newName);
try
{
File.Move(originalFilePath, newPath);
}
catch (Exception ex)
{
Console.WriteLine($"Error renaming file: {ex.Message}");
throw;
}
return newPath;
}
上述方法接收原始文件路径参数,基于该路径获取基本信息之后拼接新的名字,并执行重命名动作。如果过程中遇到错误,则抛出异常以便调用方能够捕获和处理。
阅读全文
相关推荐


















