2016-01-13 155 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