有关System.IO.StreamWriter的问题

本文关键字:问题 StreamWriter IO System 有关 | 更新日期: 2023-09-27 17:55:21

我毫不怀疑这个问题具有非常基本的性质,但对我来说这很难......我想使用保存文件对话框选择一个文件名/路径。喜欢这个:

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

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

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

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

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

但是从另一个功能我无法访问流编写器,我不知道如何更改文件。

我还想知道如何在运行时使文件中的数据可访问。在我的第一次测试中,当我调用时,它总是写入文件

file.Close()

乙然后我无法再次打开它。

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

有关System.IO.StreamWriter的问题

如果我

正确理解了你的问题;你选择的方法似乎违反了单一责任的原则,除了给你带来所有这些问题。

也许你应该考虑做的是创建一个类来管理流的静态实例,并从打开的对话框和串行端口事件中使用它让我们调用流管理类 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(…)

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

干杯