有关System.IO.StreamWriter的问题

时间:2014-03-30 22:57:10

标签: c# streamwriter savefiledialog

我毫不怀疑这些问题具有非常基本的性质,但对我来说这很难...... 我想用saveFileDialog选择文件名/路径。 像这样:

    private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
{
    // Get file name.
    string name = saveFileDialog1.FileName;

来源:http://www.dotnetperls.com/savefiledialog

然后我想用上面的Path声明StreamWriter(假设这样工作)

System.IO.StreamWriter file = new System.IO.StreamWriter(saveFileDialog1_FileOk.FileName);

这必须在saveFileDialog1_FileOk函数中完成。然后我想从另一个函数/事件处理程序(SerialPort已收到数据)写入该文件。并且文件名应该能够在运行时更改为新文件,以便来自事件处理程序的数据 被写入另一个文件。

但是从其他功能来看,我无法访问StreamWriter并且我不知道如何更改文件。

此外,我想知道如何在运行时使文件中的数据可访问。在我的第一次测试中,当我调用

时,它总是被写入文件
file.Close()

b 那我就不能再打开了。

如果有人能建议我走的路,那将是一个很大的帮助......

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题;你选择的方法似乎违反了单一责任原则,除了引起你所有这些问题。

您应该考虑做的是创建一个管理流的静态实例的类,并从打开的对话框和串口事件中使用它 让我们调用流管理类 StreamManager 。它将具有以下代码的实现模拟器

public class StreamManager
{
    private static StreamWriter file = null;

    public void NewFile(string filePath)
    {
        this.close();

        file = new StreamWriter(filePath);
    }

    public void WriteToFile(string yourData)
    {
        file.Write(yourData);
    }

    public void close()
    {
        if (file != null /* and if not already been closed*/)
        {
            file.Flush();
            file.Close();
        } 
    }
}

现在,您可以从new StreamManager().NewFile(fileName)打开对话框和new StreamManager ().WriteToFile(…)来自串口。

请注意我没有测试上面的代码,仅作为指南提供。您应该为所有方法添加更多状态/错误管理

干杯