C# Create似乎锁定了文件。我怎样才能避免这种情况?
我有两个线程通过互相发送文件进行通信。当线程#1执行 然后线程2应该删除它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")
// 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();