我有2个线程通过相互发送文件进行通信。当线程#1执行
时// Thread #1
File.Create(@"C:\somedir\response.done");
然后线程#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中打开。请关闭该文件,然后重试。”
我该如何避免这种情况?
答案 0 :(得分:10)
File.Create
返回FileStream
。所以...关闭它:
using(File.Create(path)) {
// add contents here if needed
}
using
确保它为Dispose()
d,因此已关闭。注意:某些AV系统也可能会干扰文件访问,但这通常不是一个大问题。
答案 1 :(得分:1)
您需要关闭FileStream
创建的File.Create(@"C:\somedir\response.done");
。
答案 2 :(得分:1)
您也可以使用// Thread #1
File.Create(@"C:\somedir\response.done").Close();
所以你的代码会变成
{{1}}
答案 3 :(得分:0)
将您的代码更改为
// Thread #1
using (FileStream FS = File.Create(@"C:\somedir\response.done") ) {};