Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中,第二次创建文件时将引发异常_C#_Winforms - Fatal编程技术网

在C#中,第二次创建文件时将引发异常

在C#中,第二次创建文件时将引发异常,c#,winforms,C#,Winforms,我正在使用文件流创建一个文件,但在此之前,我正在应用if条件来查看文件是否存在。当我点击按钮时,如果有支持文件,它会删除该文件。没问题,如果我再次按下按钮,文件就会被创建。起初,它工作得很好 现在文件被创建了,如果我按下按钮,它应该被删除,但它显示一个异常,表示*进程无法访问文件“C:\Hello1”,因为它正被另一个进程使用* 下面是我的代码 private void button2_Click(object sender, EventArgs e) { st

我正在使用文件流创建一个文件,但在此之前,我正在应用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");

        }
    }

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

您永远不会关闭创建该文件的流。使用语句将
FileStream
放入
中,这将自动清理打开的文件句柄

using(FileStream create = createFile.Create())
{
    //code here
}

哦,是的,我得到了答案

我需要使用

     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()

第二次尝试时,文件流仍处于打开状态,请尝试以下操作:

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");
        }
    }
}

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

            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;

是否您在创建文件时没有关闭/处理
Filestream
,因此当您尝试删除文件时,程序第二次仍然有效地打开了该文件?或者在退出使用范围时使用
using
自动调用
Dispose()