2017-01-15 7 views
1

私は自分のトレーディングカードのコレクションに関する情報を自由に保存しています。私はFile.AppendAllTextメソッドを使用して重複したエントリがExcelにならないようにする方法があるのだろうかと思っていました。私の現在のコードは次のとおりです。重複するエントリを忘れるのを防ぐ

private void btnAdd_Click(object sender, EventArgs e) 
    { 
     Global.card.Add(new Card(lblCardNoFinal.Text, lblCardNameFinal.Text, lblCardRarityFinal.Text, lblCardTypeFinal.Text)); 
     string file = ("..\\Debug\\LOB.csv"); 
     string delimiter = ","; 

     StringBuilder sb = new StringBuilder(); 

     foreach (Card card in Global.card) 
     { 
      sb.AppendLine(card.CardNo + delimiter + card.CardName + delimiter + card.CardRarity + delimiter + card.CardType); 
     } 

     File.AppendAllText(file, sb.ToString()); 

     MessageBox.Show("Card Added"); 
    } 

私は複数のカードを追加しようとすると、私はそれをしたくない場合に、それが二回表示されるように、以前の1のデータをExcelファイルに入力されます。ありがとう

答えて

1

代わりにFile.WriteAllTextを試してください。 File.AppendAllTextはファイルの末尾にテキストを追加します。

また、あなたはカードのFile.AppendAllLinesを行うことができますが、このように、追加されています

private void btnAdd_Click(object sender, EventArgs e) 
{ 
    string file = ("..\\Debug\\LOB.csv"); 
    string delimiter = ","; 

    var card = new Card(lblCardNoFinal.Text, lblCardNameFinal.Text, lblCardRarityFinal.Text, lblCardTypeFinal.Text) 
    Global.card.Add(card); 
    File.AppendAllLines(file, new[] {card.CardNo + delimiter + card.CardName + delimiter + card.CardRarity + delimiter + card.CardType}); 

    MessageBox.Show("Card Added"); 
} 
+0

こんにちは、これを試しましたが、エラーが表示されます File.AppendAllLines(new [] {file、card.CardNo + delimiter + card.CardName + delimiter + card.CardRarity + delimiter + card.CardType} ); 1つの引数を取るオーバーロードメソッドはありません。 – fg2210

+0

また、前のデータを上書きしたくないので、WriteAllTextを使用したくありません。助けてくれてありがとう – fg2210

+0

もう一度やり直してください。新しい[] {'を間違った場所に置きます。 – Stuart

0

それはあなたが一枚のカードを追加するたびに、あなたがGlobal.cardからすべてのカードを追加していることになりますので、私はなるだろうforeachループを取り除く。この単一のカードだけを追加することができます。

Card newCard = new Card(lblCardNoFinal.Text, lblCardNameFinal.Text, lblCardRarityFinal.Text, lblCardTypeFinal.Text) 
Global.card.Add(newCard) 
File.AppendAllText(file, newCard.CardNo + delimiter + newCard.CardName + delimiter + newCard.CardRarity + delimiter + newCard.CardType); 

あなたはまたのStringBuilderを必要としませんが、私はあなたのカードのクラスのToStringメソッドに動作します: のようなものを試してみてください。

関連する問題