【问题标题】:C# - I'm having problems overwriting data in text file from ListboxC# - 我在从列表框覆盖文本文件中的数据时遇到问题
【发布时间】:2018-03-20 18:50:17
【问题描述】:

我正在创建一个可以将网站网址/链接保存到列表框中的小程序。从那里,我可以将列表框的内容保存到文本文件中。然后将该文本文件保存到我桌面上为该程序过早制作的文件夹中。该应用程序可以打开一个文本文件并将内容显示到列表框,以及创建和保存一个新的文本文件。我的问题是如何正确覆盖文本文件。

这是我保存工具箱按钮的代码:

private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
    SaveFileDialog saveFileDialog1 = new SaveFileDialog();
    string line = "";

    if (File.Exists(path)) //the path string is a folder on my desktop
    {
        FileStream fstream = File.Open(path, FileMode.Create);
        while (line != null)
        {
            using (StreamWriter write = new StreamWriter(fstream))
            {
                foreach (object item in WebListBox.Items)
                    write.WriteLine(item.ToString());
            }
        }
    }
    else
    {
        saveFileDialog1.Filter = "Text files (*.txt)|*.txt";
        saveFileDialog1.Title = "Save as Text File";
        saveFileDialog1.ShowDialog();

        if (saveFileDialog1.ShowDialog() == DialogResult.OK)
        {
            using (FileStream S = File.Open(saveFileDialog1.FileName, FileMode.CreateNew))
            {
                using (StreamWriter st = new StreamWriter(S))
                {
                    foreach (var items in WebListBox.Items)
                        st.WriteLine(items.ToString());
                }
            }
        }
    }
}

问题是,在我使用“另存为工具栏”按钮创建文本文件后,编译器似乎忽略了我的 if 语句中的代码,并假定我总是想创建一个新的文本文件来保存。提前致谢!

【问题讨论】:

  • "glances" 就像编译器跳过 if 语句并继续读取 else 语句一样。对不起措辞。是的,我一直在调试这段代码,但仍然没有找到任何可能的解决方案。
  • 注意:您显示 ShowDialog 两次。在第一个分支中,您的“行”除了一个空字符串之外什么都不是。
  • path 是文件的路径还是文件夹?根据 MSDN 关于File.Exists():“如果path 描述了一个目录,则此方法返回false。”
  • 它指向一个文件夹。然后我让我的代码检查文件夹以查看是否存在同名文件,如果存在则覆盖它。
  • 你的 while 循环永远不会退出,它应该抛出异常,因为 fstream 永远不会关闭。

标签: c# winforms listbox


【解决方案1】:

经过多次修改和外部帮助,我发现了问题所在。我试图从我的文件夹目录中检索的文件名为空,因此不会保存任何内容。因此,我所做的是,如果上次打开/保存到表单上,我将从表单本身检索文件名。

Here's a picture to help visualize. Any text file that was last opened or saved, it would display it here and compiler would use that path in my code.

使用文件的完整路径而不是缩短路径,我会将文件的内容覆盖到该路径。这样做还可以让我将文件保存在计算机上的任何位置。

private void saveToolStripMenuItem_Click(object sender, EventArgs e)
            {            
                var fileNameAndPath = filedisplaylabel.Text; 

        if (string.IsNullOrEmpty((fileNameAndPath)))
        {
            OpenFileDialog openfiledialog1 = new OpenFileDialog();

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                filedisplaylabel.Text = Path.GetFullPath(openFileDialog1.FileName); 
                fileNameAndPath = filedisplaylabel.Text;
            }
        }                        
            try
            {
                using (FileStream fstream = new FileStream(fileNameAndPath,
                    FileMode.Open,
                        FileAccess.Write))
                {
                    using (StreamWriter write = new StreamWriter(fstream))
                    {
                        foreach (var item in WebListBox.Items)
                            write.WriteLine(item.ToString());
                        write.Close();
                    }
                    fstream.Close();
                }
            }
            catch (DirectoryNotFoundException ex)
            {
                MessageBox.Show(ex.Message, "File not found error");
            }                                                                                 
    }

【讨论】:

    猜你喜欢
    • 2016-08-24
    • 2017-05-29
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    相关资源
    最近更新 更多