2012-08-07 72 views
0

我有一个文本文件,我在其中添加,更新和删除数据(联系人)。每个联系人都在一行中。现在,当我通过我的应用程序删除联系人时,我正在删除我的文件中的一行(用空字符串替换联系人)这导致联系人之间出现空行。我不想要这个空行。这是我写的一段代码:从文件中删除空行

private void btn_condel_Click(object sender, EventArgs e) 
    { 
     bufferedListView1.Items.Clear(); 
     string fileContents = File.ReadAllText("C:\\sample.txt"); 
     string replacedContents = fileContents.Replace(txt_editname.Text + "@" + txt_editno.Text,""); 
     File.WriteAllText("C:\\sample.txt", replacedContents); 
     // Rest of the code 

在替换文件中的数据时,需要做些什么来消除这条空行。

+0

您是否在内存中拥有所有联系方式?如果是这样,我认为最好在操作结束时重写所有内容,而不是在每一个操作(添加,删除,修改)中重写所有内容 – Steve 2012-08-07 09:56:19

+0

我在列表视图中显示联系人,这些修改应立即显示在列表中。所以我不能这样做,因为你说 – Cdeez 2012-08-07 10:02:12

回答

2

看起来解决这个问题也只是抓住新的生产线的最简单的方法:

string replacedContents = fileContents.Replace(
    txt_editname.Text + "@" + txt_editno.Text + System.Environment.NewLine,""); 
+0

你可以使用[''System.Environment.NewLine'](http://msdn.microsoft.com/en-us/library/system.environment.newline.aspx) – 2012-08-07 09:42:28

+0

@PaoloMoretti谢谢,包括它。 – 2012-08-07 09:43:27

0

试试这个,

string fileContents = File.ReadAllText("C:\\sample.txt"); 
    string replacedContents = fileContents.Replace(txt_editname.Text + "@" +  txt_editno.Text,""); 
    File.WriteAllText("C:\\sample.txt", replacedContents.Trim()); 
0

我还没有尝试过,但是这个应该工作:将文件读入字符串数组,将其转换为列表(因为您无法从数组中移除项目),移除该联系人并将其余部分写回到文件中。如果你解析文本文件(btw:你不能使用XML文件......),那么它会更好地工作到你自己的联系人数据类型。然后你有一个列表,并可以从那里删除一个对象。

string[] lines = File.ReadAllLines("C:\\sample.txt"); 
List<string> list = lines.ToList<string>(); 
list.Remove(txt_editname.Text + "@" + txt_editno.Text); 
File.WriteAllLines("C:\\sample.txt", list.ToArray());