C#进程无法访问该文件,因为它正由另一个进程使用(文件对话框)

时间:2012-06-28 13:56:44

标签: c# windows winforms visual-studio-2008

我有一个富文本框,正在使用日志信息进行更新。有一个按钮可以将日志输出保存到文件中。当我使用下面的代码尝试将输出保存到文件时,我收到“进程无法访问该文件,因为它正被另一个进程使用”异常。我不知道为什么我收到这个例外。它发生在我在对话框中创建的新文件中。它发生在我尝试保存信息的任何文件上。

private void saveLog_Click(object sender, EventArgs e)
{
            OnFileDialogOpen(this, new EventArgs());
            // Displays a SaveFileDialog so the user can save the Image
            // assigned to Button2.
            SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            saveFileDialog1.Filter = "Text File|*.txt|Log File|*.log";
            saveFileDialog1.Title = "Save Log File";
            saveFileDialog1.ShowDialog();

            // If the file name is not an empty string open it for saving.
            if (saveFileDialog1.FileName != "")
            {
                // Saves the Image via a FileStream created by the OpenFile method.
                System.IO.FileStream fs =
                   (System.IO.FileStream)saveFileDialog1.OpenFile();
                // Saves the Image in the appropriate ImageFormat based upon the
                // File type selected in the dialog box.
                // NOTE that the FilterIndex property is one-based.
                switch (saveFileDialog1.FilterIndex)
                {
                    case 1:

                        try
                        {
                            this.logWindow.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.PlainText);
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.ToString());
                        }


                        break;
                    case 2:

                        try
                        {
                            this.logWindow.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.PlainText);
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.ToString());
                        }

                        break;
                }

                fs.Close();
                OnFileDialogClose(this, new EventArgs());
            }
}

1 个答案:

答案 0 :(得分:3)

似乎同一个文件打开了两次。首先,您使用以下方法创建它:

System.IO.FileStream fs =
                   (System.IO.FileStream)saveFileDialog1.OpenFile();

然后将相同的文件名传递给this.logWindow.SaveFile,这可能会打开具有给定名称的文件并将数据保存到该文件中。

我想第一次电话是不必要的。