Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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# Create似乎锁定了文件。我怎样才能避免这种情况?_C#_File - Fatal编程技术网

C# Create似乎锁定了文件。我怎样才能避免这种情况?

C# Create似乎锁定了文件。我怎样才能避免这种情况?,c#,file,C#,File,我有两个线程通过互相发送文件进行通信。当线程#1执行 然后线程2应该删除它 // Thread #2 while (!File.Exists(@"C:\somedir\response.done")) Thread.Sleep(100); while (File.Exists(@"C:\somedir\response.done")) { try { File.Delete(@"C:\somedir\response.done")

我有两个线程通过互相发送文件进行通信。当线程#1执行

然后线程2应该删除它

// Thread #2
while (!File.Exists(@"C:\somedir\response.done"))
    Thread.Sleep(100);


while (File.Exists(@"C:\somedir\response.done"))
    {
        try {
               File.Delete(@"C:\somedir\response.done");
            }
        catch { Thread.Sleep(1000); };

    }
但是,该文件似乎已被锁定。目录中生成了response.done文件,但它从未被删除。当我尝试手动删除它时

“该操作无法完成,因为该文件已在MyProgram中打开。请关闭该文件,然后重试。”


如何避免这种情况?

File.Create
返回一个
FileStream
。所以关闭它:

using(File.Create(path)) {
    // add contents here if needed
}

使用
确保它是
Dispose()
d,因此关闭。注意:某些AV系统也可能会干扰文件访问,但这通常不是什么大问题。

您需要关闭由
file.Create创建的
FileStream
(@“C:\somedir\response.done”)

将代码更改为

// Thread #1
using (FileStream FS = File.Create(@"C:\somedir\response.done") ) {};

您也可以使用
.Close()

因此,您的代码将成为

// Thread #1
File.Create(@"C:\somedir\response.done").Close();
// Thread #1
File.Create(@"C:\somedir\response.done").Close();