2017-01-15 2 views
1

Я создаю программу в свое свободное время, чтобы хранить информацию о моей коллекции торговых карт. Мне было интересно, есть ли способ предотвратить дублирование записей в excel с помощью метода 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"); 
    } 

Когда я пытаюсь добавить более одной карты, данные предыдущего вводится в файл первенствовать, чтобы он отображался в два раза, когда я не хочу, чтобы это. Thanks

ответ

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 (новый [] {файл, card.CardNo + разделитель + карта.Карта + разделитель + карта.CardRarity + разделитель + карта.CardType}); В нем говорится, что нет метода перегрузки, который принимает 1 аргумент – fg2210

+0

Кроме того, я не хочу использовать WriteAllText, потому что я не хочу, чтобы предыдущие данные были перезаписаны. Спасибо за вашу помощь. – fg2210

+0

Повторите попытку, я положил 'new [] {' в неправильном месте. – 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 для класса карты.

Смежные вопросы