21人参与 • 2026-01-23 • Asp.net
,)分隔,例如:姓名,年龄,性别。")或换行符,需要用双引号将字段包围起来。如果字段本身包含双引号,则需要用两个双引号表示一个双引号。例如:"张三,程序员","25","男",其中第一个字段包含逗号,因此用双引号包围;若字段是 "o'neill",则应写成 """o""neill"""。常见的 csv 文件编码有 utf - 8、gbk 等。在读写 csv 文件时,需要确保指定正确的编码格式,否则可能会出现乱码。例如,在使用 streamreader 或 streamwriter 时,可以通过 encoding 参数指定编码:
using (streamreader reader = new streamreader("data.csv", system.text.encoding.utf8))
{
// 读取操作
}原理 :通过 streamreader 逐行读取 csv 文件内容,然后对每一行进行处理,将字符串按逗号分隔成数组。
代码示例 :
using system;
using system.collections.generic;
using system.io;
class program
{
static void main()
{
list<string[]> csvdata = new list<string[]>();
using (streamreader reader = new streamreader("data.csv"))
{
string line;
while ((line = reader.readline()) != null)
{
// 将每一行按逗号分隔成数组
string[] fields = line.split(',');
csvdata.add(fields);
}
}
// 输出读取的数据
foreach (string[] row in csvdata)
{
foreach (string field in row)
{
console.write(field + "\t");
}
console.writeline();
}
}
}textfieldparser 是 .net framework 提供的一个专门用于解析文本文件的类,它可以更好地处理 csv 文件中包含特殊字符的字段。using system;
using microsoft.visualbasic.fileio;
class program
{
static void main()
{
using (textfieldparser parser = new textfieldparser("data.csv"))
{
parser.textfieldtype = fieldtype.delimited;
parser.setdelimiters(",");
while (!parser.endofdata)
{
try
{
string[] fields = parser.readfields();
foreach (string field in fields)
{
console.write(field + "\t");
}
console.writeline();
}
catch (malformedlineexception ex)
{
console.writeline("行 {0} 格式错误: {1}", parser.linenumber, ex.message);
}
}
}
}
}microsoft.visualbasic.dll 组件。install-package csvhelper
using system;
using system.collections.generic;
using system.io;
using csvhelper;
using csvhelper.configuration;
class program
{
static void main()
{
using (streamreader reader = new streamreader("data.csv"))
using (csvreader csv = new csvreader(reader, new csvconfiguration(system.globalization.cultureinfo.invariantculture)))
{
var records = csv.getrecords<person>().tolist();
foreach (person person in records)
{
console.writeline($"姓名: {person.name}, 年龄: {person.age}, 性别: {person.gender}");
}
}
}
}
public class person
{
public string name { get; set; }
public int age { get; set; }
public string gender { get; set; }
}using system;
using system.io;
class program
{
static void main()
{
string[][] data = new string[][]
{
new string[] {"姓名", "年龄", "性别"},
new string[] {"张三", "25", "男"},
new string[] {"李四", "30", "女"}
};
using (streamwriter writer = new streamwriter("data.csv"))
{
foreach (string[] row in data)
{
// 将数组元素用逗号连接成一行
writer.writeline(string.join(",", row));
}
}
}
}stringbuilder 构建整个 csv 内容,最后一次性写入文件,减少文件操作次数,尤其适用于大量数据写入。using system;
using system.io;
using system.text;
class program
{
static void main()
{
string[][] data = new string[][]
{
new string[] {"姓名", "年龄", "性别"},
new string[] {"张三", "25", "男"},
new string[] {"李四", "30", "女"}
};
stringbuilder sb = new stringbuilder();
foreach (string[] row in data)
{
sb.appendline(string.join(",", row));
}
file.writealltext("data.csv", sb.tostring());
}
}using system;
using system.collections.generic;
using system.io;
using csvhelper;
class program
{
static void main()
{
list<person> persons = new list<person>
{
new person { name = "张三", age = 25, gender = "男" },
new person { name = "李四", age = 30, gender = "女" }
};
using (streamwriter writer = new streamwriter("data.csv"))
using (csvwriter csv = new csvwriter(writer, system.globalization.cultureinfo.invariantculture))
{
csv.writerecords(persons);
}
}
}
public class person
{
public string name { get; set; }
public int age { get; set; }
public string gender { get; set; }
}using system;
using system.io;
class program
{
static void main()
{
string[][] data = new string[][]
{
new string[] {"姓名", "年龄", "爱好"},
new string[] {"张三", "25", "读书, 旅行"},
new string[] {"李四", "30", "打篮球\" \"排球"}
};
using (streamwriter writer = new streamwriter("data.csv"))
{
foreach (string[] row in data)
{
for (int i = 0; i < row.length; i++)
{
// 如果字段中包含逗号、引号或换行符,用双引号包围
if (row[i].contains(",") || row[i].contains("\"") || row[i].contains("\n") || row[i].contains("\r"))
{
// 将字段中的双引号替换为两个双引号
row[i] = "\"" + row[i].replace("\"", "\"\"") + "\"";
}
writer.write(row[i]);
if (i < row.length - 1)
{
writer.write(",");
}
}
writer.writeline();
}
}
}
}using system;
using system.collections.generic;
using system.io;
class program
{
static void main()
{
list<person> persons = new list<person>();
using (streamreader reader = new streamreader("data.csv"))
{
// 跳过标题行
reader.readline();
string line;
while ((line = reader.readline()) != null)
{
string[] fields = line.split(',');
person person = new person
{
name = fields[0],
age = int.parse(fields[1]),
gender = fields[2]
};
persons.add(person);
}
}
// 输出对象数据
foreach (person person in persons)
{
console.writeline($"姓名: {person.name}, 年龄: {person.age}, 性别: {person.gender}");
}
}
}
public class person
{
public string name { get; set; }
public int age { get; set; }
public string gender { get; set; }
}文件路径问题
file.exists 方法检查文件是否存在:if (!file.exists("data.csv"))
{
console.writeline("文件不存在!");
}数据类型转换问题
tryparse 方法进行安全转换:int age;
if (int.tryparse(fields[1], out age))
{
person.age = age;
}
else
{
console.writeline("年龄数据格式错误!");
}性能优化
streamreader 逐行读取,或使用 streamwriter 逐行写入。以上就是c#操作csv文件的详细教程的详细内容,更多关于c#操作csv文件的资料请关注代码网其它相关文章!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论