3

我正在使用文件流创建文件,但在此之前我正在应用 if 条件来查看文件是否存在。当我单击按钮并且假设文件在那里时,它会删除该文件。没关系,如果我再次按下按钮,文件就会被创建。第一次它运作良好。

现在文件已创建,如果我再次按下按钮,它应该删除,但它会抛出一个异常,说*进程无法访问文件'C:\ Hello1',因为它正在被另一个进程使用。*

下面是我的代码

     private void button2_Click(object sender, EventArgs e)
    {
        string fileName = @"C:\Hello1";
        if

            (File.Exists(fileName))
        {
            File.Delete(fileName);
            MessageBox.Show("File is deleted");
        }
        else
        {
            FileInfo createFile = new FileInfo(fileName);
            FileStream create = createFile.Create();
            MessageBox.Show("Created");

        }
    }

那么为什么我不能第二次删除,我的文本文件也没有打开,但它仍然显示异常。

4

4 回答 4

3

您永远不会关闭创建文件的流。把你FileStream放在一个using语句中,它会自动清理打开的文件句柄。

using(FileStream create = createFile.Create())
{
    //code here
}
于 2012-11-15T20:30:37.653 回答
2

第二次尝试时文件流仍然打开,试试这个:

private void button2_Click(object sender, EventArgs e)
{
    string fileName = @"C:\Hello1";
    if

        (File.Exists(fileName))
    {
        File.Delete(fileName);
        MessageBox.Show("File is deleted");
    }
    else
    {
        FileInfo createFile = new FileInfo(fileName);
        using(FileStream create = createFile.Create())
        {
            MessageBox.Show("Created");
        }
    }
}
于 2012-11-15T20:34:18.983 回答
0

哦,是的,我得到了答案,

我需要使用

     private void button2_Click(object sender, EventArgs e)
{
    string fileName = @"C:\Hello1";
    if

        (File.Exists(fileName))
    {
        File.Delete(fileName);
        MessageBox.Show("File is deleted");
    }
    else
    {
        FileInfo createFile = new FileInfo(fileName);
        FileStream create = createFile.Create();
        MessageBox.Show("Created");
        create.Close();

    }
}

我们需要使用 create.Close();

于 2012-11-15T20:31:41.930 回答
0

这是我用来编写本地日志的示例:

            StreamWriter log;

            string fpath = string.Format(@"{0}\{1}.txt",GetDirectory(),DateTime.Now.ToString("yyy-MM-dd"));
            if (!File.Exists(fpath))
            {
                log = new StreamWriter(fpath);
            }
            else
            {
                log = File.AppendText(fpath);
            }

            log.WriteLine(string.Format("{0} ==> {1}",DateTime.Now.ToString("MM/dd/yyy HH:mm:ss"), Message));

            log.Dispose();
            log = null;
于 2012-11-15T20:43:40.897 回答