2016-01-13 157 views
3

我需要從文本文件中刪除一行。問題是,當我嘗試刪除一行時,我必須按BtnStergeMedicam兩次才能刪除。我不知道爲什麼我必須按兩次。從文本文件中刪除一行文本

private void BtnStergeMedicam_Click(object sender, EventArgs e) 
{ 
    string line; 
    string line_to_delete = ListAfisMedicam.SelectedItem.ToString();//I take the line 
    //to delete from ListAfisMedicam 
    using (StreamReader reader = new StreamReader(@"D:\MyTest.txt")) 
    { 
     using (StreamWriter writer = new StreamWriter(@"D:\MyTest2.txt")) 
     { 
      while ((line = reader.ReadLine()) != null) 
      { 
       if (String.Compare(line, line_to_delete) == 0) 
        continue; 
       writer.WriteLine(line); 
      } 
      writer.Close(); 
     } 
     reader.Close(); 
    } 
    System.IO.File.Copy(@"D:\MyTest2.txt", @"D:\MyTest.txt",true); 
    ListAfisMedicam.Items.Clear(); 
    string[] lines = System.IO.File.ReadAllLines(@"D:\MyTest.txt"); 
    foreach (string linie in lines) 
    { 
     ListAfisMedicam.Items.Add(linie); 
    } 
} 
+0

你是什麼意思,你必須點擊它兩次?您單擊列表框中的某個項目,單擊它,然後再次單擊相同的項目並且它可以工作?它是否把它放在你的MyTest2中,而不是複製過來的? 此外,通用編碼實踐:這不是Java或C++,你可以使用==來比較字符串運算符,並使用()自動關閉和配置流,所以刪除您的讀取和寫入器關閉語句(這就是實際使用) – Dispersia

+1

可能是第一次'string [] lines = System.IO.File.ReadAllLines(@「D:\ MyTest2.txt」);'return 0 lines。嘗試調試代碼。 – erikscandola

+3

僅供參考,因爲您在'using'語句中擁有它們,所以您不需要'關閉'這些流。 – juharr

回答

1

我發現了這個問題。 ListAfisMedicam.SelectedItem.ToString()還給我\nID - 01, Nume - Nurofen, Lot - 0123, Categorie - Capsula, Producator - Dona, Cantitate - 300, DataIntrare - 13-Jan-16 12:00:00 AM, DataFabricarii - 01-Jan-16 12:00:00 AM, DataExpirarii - 31-Jan-16 12:00:00 AM, PretVanzare - 2;當它讀取每一行和比較,它讀起來就像上,但W/O \n 當我嘗試第二次(按BtnStergeMedicam第二次)ListAfisMedicam.SelectedItem.ToString()回報ID - 01, Nume -Nurofen ...

編輯:解決這個問題。謝謝@tom_redox。其他地方的問題。當我填充列表框時,我踢了一個\n,這是問題所在。坦克你幫我,從現在開始,我會開始每當我遇到任何問題時使用斷點

+1

幹得好Constantin,這些技能會很好的爲你服務在將來 – tomRedox