Я пытаюсь разрешить пользователю добавлять еще одну запись в файл CSV, который создает моя программа. Он строит его из базы данных, как это:C# 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);
}
я тогда зову его в DataGridView, как это:
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, в нижней части есть пустая строка, которой не должно быть. Каков наилучший способ разрешить мне повторное использование процесса, чтобы я мог добавлять его в файл более одного раза?
где вы 'Промывка файл, а также закрытие файла, как только вы добавите data'? – MethodMan
Я могу только предположить, что им нет, как бы я это сделал? –
вам нужно закрыть FileStream, в вашем случае это 'sr.Close();' но я бы сделал 'sr.Flush()', затем вызовет 'sr.Close()', затем вызовет 'sr.Dispose()' – MethodMan