我正在尝试允许用户在我的程序正在构建的CSV文件中添加另一个条目。它是用这样的数据库构建的:
public void CreateCsvFile()
{
var filepath = @"F:\A2 Computing\C# Programming Project\ScheduleFile.csv";
var ListGather = new PaceCalculator();
var records =
from record in ListGather.NameGain()
.Zip(ListGather.PaceGain(),
(a, b) => new { Name = a, Pace = b })
group record.Pace by record.Name into grs
select String.Format("{0},{1}", grs.Key, grs.Average()); //reduces the list of integers down to a single double value by computing the average.
File.WriteAllLines(filepath, records);
}
然后我将其称为数据网格视图,如下所示:
private void button2_Click(object sender, EventArgs e)
{
CreateExtFile CsvCreate = new CreateExtFile();
CsvCreate.CreateCsvFile();
return;
}
private void LoadAthletes()
{
string delimiter = ",";
string tableName = "Schedule Table";
string fileName = @"F:\A2 Computing\C# Programming Project\ScheduleFile.csv";
DataSet dataset = new DataSet();
StreamReader sr = new StreamReader(fileName);
dataset.Tables.Add(tableName);
dataset.Tables[tableName].Columns.Add("Athlete Name");
dataset.Tables[tableName].Columns.Add("Pace Per Mile");
string allData = sr.ReadToEnd();
string[] rows = allData.Split("\r".ToCharArray());
foreach (string r in rows)
{
string[] items = r.Split(delimiter.ToCharArray());
dataset.Tables[tableName].Rows.Add(items);
}
this.dataGridView1.DataSource = dataset.Tables[0].DefaultView;
}
按钮打开一个窗口,其中包含用于向csv文件添加新条目的字段。这就是我这样做的方式:
private void AddToScheduleBtn_Click(object sender, EventArgs e)
{
string FileName = @"F:\A2 Computing\C# Programming Project\ScheduleFile.csv";
string AthleteDetails = textBox1.Text + "," + textBox2.Text;
File.AppendAllText(FileName, AthleteDetails);
AddToSchedule.ActiveForm.Close();
}
虽然这可以工作一次,当我尝试再次向我的csv文件中添加另一个条目时,它表示它在另一个进程中打开并且程序崩溃了。当数据首次出现在我的datagridview中时,底部有一个空行,不应该有。允许我重复使用该过程的最佳方法是什么,以便我可以多次追加该文件?
答案 0 :(得分:3)
我认为你的行,
StreamReader sr = new StreamReader(fileName);
已打开文件。您想要执行以下操作:
string allData = sr.ReadToEnd();
sr.Close();
sr.Dispose();
答案 1 :(得分:1)
我没有构建您的代码,但是当文件阅读器未关闭时,通常会引发此错误:)
您应该在LoadAthletes方法中添加sr.close()
或实现自动关闭的使用:
using (StreamReader sr = new StreamReader(fileName))
{
allData = sr.ReadToEnd();
}
或使用以下方法:
allData = File.ReadAllText(fileName);
希望这个帮助
有关详细信息,请参阅此问题do-i-need-to-explicitly-close-the-streamreader-in-c-sharp-when-using-it-to-load