私はすでにここで尋ねられた人たちを知っていますが、彼らが持っている解決策を試しましたが、助けにはならないという問題があります。ファイルが使用中であることが原因でIOExceptionが発生しました
私の問題:私は2つのフォームでC#でプログラムをやっています。私のメインフォームは、ファイル.txtは読んでのDataGridViewに情報を置くために使用されます。
private void btn_Confirmer_Click(object sender, EventArgs e)
{
string filePath = @"...\Clients.txt";
Client client = new Client();
client.Id = idClient++;
client.Name = tb_name.Text;
client.LastName = tb_lastName.Text;
client.Date = dtp_date.Value.ToString("dd-MMM-yyyy");
client.Price = Convert.ToInt32(tb_price.Text);
client.Phone = tb_telephone.Text;
client.ID_Box = Convert.ToInt32(tb_idbox.Text);
string clientInfo = client.Id.ToString() + ";" + client.Name.ToString() + ";" + client.LastName.ToString() + ";" + client.Date.ToString() + ";" +
client.Montant.ToString() + ";" + client.Phone.ToString() + ";" + client.ID_Boc.ToString() + ";";
using (StreamReader sr = new StreamReader(filePath))
{
string allData = sr.ReadToEnd() + clientInfo;
File.WriteAllText(filePath, allData);
}
this.Close();
}
問題:
public void LireFichier()
{
DataGridView dataGridView1 = new DataGridView();
string delimeter = ";";
string tableName = "Clients";
string filePath = @"C:...\Clients.txt";
DataSet dataset = new DataSet();
using (StreamReader sr = new StreamReader(filePath))
{
dataset.Tables.Add(tableName);
dataset.Tables[tableName].Columns.Add("ID");
dataset.Tables[tableName].Columns.Add("Name");
dataset.Tables[tableName].Columns.Add("LastName");
dataset.Tables[tableName].Columns.Add("Datet");
dataset.Tables[tableName].Columns.Add("Price");
dataset.Tables[tableName].Columns.Add("Phone");
dataset.Tables[tableName].Columns.Add("ID box");
string allData = sr.ReadToEnd();
string[] rows = allData.Split("\r".ToCharArray());
foreach (string r in rows)
{
string[] items = r.Split(delimeter.ToCharArray());
dataset.Tables[tableName].Rows.Add(items);
}
this.dataGridView1.DataSource = dataset.Tables[0].DefaultView;
}
私の2番目の形式は、私の.txtファイルにクライアントを追加するために使用されますStreamReaderまたはFile.WriteAllTextに何が残っていても、私はいつも同じ例外(System.IO.IOException)が発生しています。私のファイルは、私の2番目の形式でファイルに書き込むために到着したときに使用されています。
私が試した解決策は以下のとおりです。
- は、私が使用してブロックコールが終わりに処分することがわかっている場合でも
- sr.Close()
- をsr.Dispose()を使用してブロックを配置しました。
- sr.Close()およびsr.Dispose()が命令の最後にあります。
は、これらのブロックが同じ時間に実行されている可能性がありますか?私はファイルが赤色である間に書き込みを試みると例外がスローされることを意味します – tomassino
実際の例外テキストを与えることから始めよう – ColinM
私は関数ReadFile()を呼び出します。私のpublic form1(){}ではInitializeComponent()の前にあります。どこで私のファイルを読んでからファイルを閉じる(少なくとも私は閉じようとした)と私は別のbutton_clickを持っていますそれは私のクライアントを追加することができます私の2番目のフォームを開く –