如何在其他线程写入文件时删除文件?

时间:2010-12-10 07:12:06

标签: c# file-io

每当我尝试在文件中使用File.Delete方法时,我就会收到IOException。我无法控制写作线程。所以从我的线程如何停止文件写入和删除文件。

4 个答案:

答案 0 :(得分:4)

你不能;这就是文件锁定的全部要点 - 准确地防止你提出的建议。

你可以达到同样效果的唯一方法是先杀掉另一个进程。这是一个非常糟糕的设计,你可能根本无法接受。

为什么你还需要这样做?

答案 1 :(得分:0)

为了实现这一点,编写线程必须以非独占模式打开文件,以允许访问该文件给其他人。

如果你对写作线程没有任何控制权,你将无法做到。

一种可能的替代方法是尝试获得用于写入的相同句柄。毕竟,如果它是你的应用程序中的一个线程,那么这个句柄就在你的内存空间中。

请记住,如果您确实设法删除了该文件,那么另一个线程可能不会期望它,如果它不处理它在尝试再次写入时会遇到的异常,则您的整个过程可能会被终止。

说真的,你应该重新考虑你的设计。

答案 2 :(得分:0)

简单地说,这是不可能的,因为其他一些进程在写入时强制独占锁定文件,你无法获得锁定。

因此,您的进程必须等到锁定进程释放锁定或以某种方式终止锁定进程。

答案 3 :(得分:0)

其他一些帖子?即在你自己的程序中?

告知它已经出现了什么,它需要停止写入,关闭文件并删除它。然后让它回复消息并执行此操作。