删除listview中选定的文件中的一行文本

时间:2012-08-10 10:06:32

标签: c# winforms file listview

我有一个列表视图,显示邮件 - 发件人,邮件,时间是列。这些消息是从包含从串行端口读入的数据的文本文件中读取的,该文件稍后将被解析并显示在带列的列表视图中。每个列表视图项都有一个复选框,指示哪个(哪些)/要删除的消息。我遇到的问题是我无法将listview项与文本文件内容进行比较。这是代码 -

    private void btn_delete_Click(object sender, EventArgs e)
    {
        try
        {
            string filedata = File.ReadAllText("C:\\message.txt");
            string replacedata="";
            DialogResult result1 = MessageBox.Show("Are you sure to delete?", "Confirm Delete", MessageBoxButtons.YesNo);

            if (result1.Equals(DialogResult.Yes))
            {
                for (int i = 0; i < lvwMessages.Items.Count; i++)
                {
                    if (lvwMessages.Items[i].Checked)
                    {

                        replacedata = filedata.Replace(lvwMessages.SelectedItems[0] + Environment.NewLine, "");
                        lvwMessages.Items[i].Remove();
                        i--;
                    }

                }
                File.WriteAllText("C:\\message.text",replacedata);

更新:如果发件人的号码在我的联系人列表中,我的列表视图中作为发件人的第一列将被名称替换。所以我无法将完整的选定行与文件中的文本进行比较,因为文件中的该行文本将包含数字而不是名称。

请帮忙。

2 个答案:

答案 0 :(得分:1)

您可以通过File.ReadAllLines读取文本文件中的所有行,它将为您提供一个数组(http://msdn.microsoft.com/ru-ru/library/system.io.file.readalllines.aspx)。 然后你可以从中删除单个条目,如下所示:

List<string> lines = File.ReadAllLines("C:\\message.txt").ToList();
foreach (ListViewItem selectedItem in lvwMessages.SelectedItems)
  if (lines.Contains(selectedItem.Text))
    lines.Remove(selectedItem.Text);

你得到了例外,因为你的列表视图中没有任何选定的项目

答案 1 :(得分:0)

从其余列中提取数据并清空该行:

                DialogResult result1 = MessageBox.Show("Are you sure to delete?", "Confirm Delete", MessageBoxButtons.YesNo);
                if (result1.Equals(DialogResult.Yes))
                {
                    string re1 = "";
                    string re2 = "";
                    string replacedata = filedata;
                    for (int i = 0; i < lvwMessages.Items.Count; i++)
                    {
                        if (lvwMessages.Items[i].Checked)
                        {
                            re1 = lvwMessages.CheckedItems[0].SubItems[1].Text;
                            re2 = lvwMessages.CheckedItems[0].SubItems[2].Text;
                            replacedata = replacedata.Replace(re1 + re2, "");
                            lvwMessages.Items[i].Remove();
                            i--;
                        }
                    }
                    StreamWriter sw = new StreamWriter("C:\\message.txt");
                    sw.Write(replacedata);
                    sw.Close();

                }