2017-03-11 2 views
0

freigeben Ich habe eine Winform mit CsvHelper Ich kann lesen und schreiben gut. Ich habe mehrere Dateien, während ich sie öffne und wieder öffne. Ich werde nach ein paar Mal einen Fehler bekommen "Der Prozess kann nicht auf die Datei 'D: .csv' zugreifen, weil sie von einem anderen Prozess verwendet wird". Kann nicht herausfinden, wie es zu beheben ist. Sie müssen nach Gebrauch geschlossen werden, wissen aber nicht wie. Kann jemand helfen?C# Wie man eine Datei nach dem Lesen streamwriter/reader

dank

private void btnRead_Click(object sender, EventArgs e) 
    { 
     using (OpenFileDialog ofd = new OpenFileDialog() { Filter = "CSV|*.csv", ValidateNames = true }) 
     { 
      if (ofd.ShowDialog() == DialogResult.OK) 
      { 

        var sr = new StreamReader(new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read, FileShare.None)); 
        var csv = new CsvReader(sr); 
        lunchBindingSource.DataSource = csv.GetRecords<Lunch>().ToString(); 
        lunchBindingSource.DataSource = csv.GetRecords<Lunch>(); 


       { 
       } 
      } 
     } 
    } 

Antwort

3

Werfen Sie einen Blick auf die using Aussage. Es wird automatisch den Stream schließen.

0

Kurze Antwort: Schließen Sie den Stream/Writer.

var sr = new StreamReader(new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read, FileShare.None)); 
var csv = new CsvReader(sr); 
lunchBindingSource.DataSource = csv.GetRecords<Lunch>(); 
sr.Close(); 
+1

Sollten Sie einen Versuch schließlich verwenden, wenn Sie diesen Weg gehen. –

1

Setzen Sie die FileStream in einem using-Block, wird es schließen geht aus dem Geltungsbereich.

using(var fs = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read, FileShare.None)) 
{ 
    var sr = new StreamReader(fs); 
    var csv = new CsvReader(sr); 
    //blah blah  
} 
+0

Das war einfach. Danke für die Hilfe – Booney440

Verwandte Themen