StreamWriter不写

时间:2016-04-08 08:39:38

标签: c# winforms

我正在尝试使用.txt创建StreamWriter文件。我希望能够读取文本文件,然后自动将该文件的内容写入新的.txt文件,并将其存储到具有相同文件名的应用程序根目录。 (希望有道理。)
目前我无法找到解决方案让它全部正常工作。请看我的代码。任何指导都将不胜感激。

private void button1_Click(object sender, EventArgs e)
{
    //read in a .txt file//  this all works fine
    OpenFileDialog op = new OpenFileDialog();
    if (op.ShowDialog() == DialogResult.OK) 
    richTextBox1.LoadFile(op.FileName, RichTextBoxStreamType.PlainText);
    this.Text = op.FileName;

    string filename = op.FileName;


    // not working //   
    //create new .txt file contaning module notes

    StreamWriter writer = new StreamWriter("..\\"op.FileName".txt" );
    using (writer)
    {
        writer.Write(richTextBox1);
    }
}

1 个答案:

答案 0 :(得分:10)

这有几个问题,首先是:

StreamWriter writer = new StreamWriter("..\\"op.FileName".txt" );

应该是:

string filename = Path.GetFilename(op.FileName);
StreamWriter writer = new StreamWriter(".\\Notes\\" + filename);

然后是另一个问题:

using (writer)
{
    writer.Write(richTextBox1);
}

尝试:

using (writer)
{
    writer.Write(richTextBox1.Text);
}

您基本上是在尝试编写RichTextBox实例,这当然无法正常运行,因为它需要string

您可能还想重新考虑一下:

if (op.ShowDialog() == DialogResult.OK) 
richTextBox1.LoadFile(op.FileName, RichTextBoxStreamType.PlainText);
this.Text = op.FileName;

这里的if构造只考虑它之后的那条线,它将以下线条置于危险区域,就像你取消开放一样,它仍然会运行。

所以把它们放在一起:

using (OpenFileDialog op = new OpenFileDialog())
{    
    op.Filter = "Text Files|*.txt"; // Nice to have a filter

    if (op.ShowDialog() == DialogResult.OK) 
    {
        richTextBox1.LoadFile(op.FileName, RichTextBoxStreamType.PlainText);

        this.Text = op.FileName;
        string filename = Path.GetFilename(op.FileName);
        StreamWriter writer = new StreamWriter(".\\Notes\\" + filename);

        using (writer)
        {
            writer.Write(richTextBox1.Text);
        }
    }

} // Clean up the OpenFileDialog instance

这假设Notes目录存在。如果不是,你必须创建它。它还假定该目录位于工作目录中,该目录通常是运行可执行文件的目录。