File.Create似乎锁定了该文件。我怎么能避免这个?

时间:2011-09-06 13:12:09

标签: c# file

我有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中打开。请关闭该文件,然后重试。”

我该如何避免这种情况?

4 个答案:

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