2012-01-19 10 views
-1

以下の関数に基づいて、ファイル.datからデータをロードするために使用されます。問題は、私が新しいファイルを読み込むたびに、前のファイルが上書きされることです。新しいファイルをロードするときに新しいデータが前のファイルに追加されるように、プログラム内の前のファイルからデータをどのように保存するのですか?外部ファイルからプログラムにロードされたデータをどのように保存するのですか?

private void btnLoad_Click(object sender, EventArgs e) 
{ 
    try 
    { 

     OpenFileDialog openFileDialog1 = new OpenFileDialog(); 
     openFileDialog1.Filter = "Data File (*.dat)|*.dat"; 
     if (openFileDialog1.ShowDialog() == DialogResult.OK) 
     { 

      TextReader f = new StreamReader(openFileDialog1.FileName); 

      String line; 

      this.letterData.Clear(); 
      this.letters.Items.Clear(); 

      while ((line = f.ReadLine()) != null) 
      { 
       int sampleSize = Form1.DOWNSAMPLE_HEIGHT * Form1.DOWNSAMPLE_WIDTH; 
       char ch = char.ToUpper(line[0]); 
       bool[] sample = new bool[sampleSize]; 

       int idx = 2; 
       for (int i = 0; i < sampleSize; i++) 
       { 
        if (line[idx++] == '1') 
         sample[i] = true; 
        else 
         sample[i] = false; 
       } 

       this.letterData.Add(ch, sample); 
       this.letters.Items.Add("" + ch); 
      } 

      f.Close(); 
     } 
     MessageBox.Show(this, "File Loaded"); 

    } 
    catch (Exception ex) 
    { 
     MessageBox.Show("Error: " + ex.Message); 
    } 
} 

答えて

1

次の行を削除しますか?

​​

EDIT:

またはあなたの辞書に

this.letterData.Add(string.Format("{0}_{1}", openFileDialog1.FileName, ch), sample); 
this.letters.Items.Add(ch.toString()); 
+0

うんを一意キーを持っているために、次しteするように変更、事はある、このプログラムは、辞書機能を使用している一つのキーのみをすることができます1つの値を保持し、クリア機能が適用されていない場合は新しいデータをロードできませんでした '同じキーを持つ項目が既に追加されています'というエラーが表示されます – hafizhans

+0

辞書をクリアすることによって、あなたはあなたが維持する必要があると言っている..あなたはどちらかを定義する必要があります固有のキー(例:ファイル名を含む)を生成するか、データを保持するために別の構造を使用する方がよいでしょうか? – Strillo

関連する問題