理解为什么,C#文件创建选项发生冲突

时间:2012-10-26 16:22:20

标签: c# file creation

在探索创建文本文件的选项时,我偶然发现了这种行为,我无法解释

两个按钮都会创建一个文件

但是当我使用button1 button2创建文件时会产生错误。

这仅在实际创建文件时发生。

创建文件后,按钮1和2按预期运行

简单GUI程序的示例代码2个按钮和附带的多个文本框

    string logFile;

    public Form1()
    {
        InitializeComponent();

        logFile = "test.txt";

    }

    private void button1_Click(object sender, EventArgs e)
    {

        if (!System.IO.File.Exists(logFile))
        {
            System.IO.File.Create(logFile);
            textBox1.AppendText("File Created\r\n");
        }
        else
        {
            textBox1.AppendText("File Already Exists\r\n");
        }

        System.IO.File.AppendText("aaa");

    }

    private void button2_Click(object sender, EventArgs e)
    {

        // 7 overloads for creation of the Stream Writer

        bool appendtofile = true;

        System.IO.StreamWriter sw;

        try
        {
            sw = new System.IO.StreamWriter(logFile, appendtofile, System.Text.Encoding.ASCII);
            sw.WriteLine("test");
            textBox1.AppendText("Added To File Created if Needed\r\n");
            sw.Close();

        }
        catch (Exception ex)
        {
            textBox1.AppendText("Failed to Create or Add\r\n");

            // note this happens if button 1 is pushed creating the file 
            // before button 2 is pushed 
            // eventually this appears to resolve itself

            textBox1.AppendText("\r\n");
            textBox1.AppendText(ex.ToString());
            textBox1.AppendText("\r\n");
            textBox1.AppendText(ex.Message);
        }



    }

1 个答案:

答案 0 :(得分:4)

您可能收到错误,因为前一个进程正在使用文件资源。在使用像file这样的资源(并使用StreamIriter对象,这是IDisposable)时,建议使用“Using”指令。一旦代码执行完成,这将关闭资源。

 using (StreamWriter sw = File.CreateText(path)) 
            {
                sw.WriteLine("Hello");
                sw.WriteLine("And");
                sw.WriteLine("Welcome");
            }   

写完第三行后,文件将自动关闭并处理资源。