【发布时间】:2018-10-08 14:48:22
【问题描述】:
我在写入 csv 文件的 C# 代码中遇到了问题(保存来自文本框的输入数据)。同时我想为每个保存的新行添加行号。我写了这段代码,但错误显示: Sysytem.IO.IOException '该进程无法访问该文件,因为它被另一个进程使用'。 我确保我正在关闭 streamwriter 和 streamreader。我不知道我还能如何改进我的代码。
var filePath = "csvFile.csv";
using (StreamWriter sw = new StreamWriter(new FileStream(filePath, FileMode.Create, FileAccess.Write)))
try
{
//Count rows in csv file and add new row number
string file = new StreamReader("csvFile.csv").ReadToEnd();
string[] lines = file.Split('\n');
int countOfLines = lines.GetLength(0);
sw.WriteLine("{0},{1},{2},{3},{4},{5}"
, countOfLines + 1
, txtEventName.Text
, txtEventType.Text
, txtAttributeName.Text
, txtAValue.Text
, txtEventDescrip.Text);
// Ensure data is written to disk
sw.Close();
}
catch()
{
}
【问题讨论】:
-
如果您提供完整的代码示例并正确缩进它会有所帮助。
-
CSV 文件永远不会超过一行,因为您总是通过
FileMode.Create创建一个新的。您可能想要做的是使用FileMode.Append打开文件,在您已通过 StreamReader 读取其内容以获取已经存在的行数。但是,请参阅 this answer 以获得更有效的方法来获取当前行数。
标签: c# csv streamreader streamwriter