如何清除正在被其他进程使用的文本文件

4

某个文本文件被另一个进程持续占用以更新其内容,我需要我的应用程序定期清空其内容。我考虑使用FileStream的fileshare.ReadWrite属性可能会有用,但我不能百分之百确定。

我如何清空由另一个进程拥有的文本文件?


15
这将取决于其他进程打开文件时使用的标志。如果它以独占方式锁定了该文件,那么您就可以忘记从您的进程修改此文件,除非杀死拥有句柄并释放它的进程。当然,另一个可能性是修改其他进程,使其在打开句柄时不以独占方式锁定该文件。 - Darin Dimitrov
@DarinDimitrov 可能也不会起作用。假设另一个进程已经分配了文件大小 N 并正在向文件末尾写入,他不能将其截断,对吧? - Chris Shain
@ChrisShain,正如我所说的,这将取决于其他进程在打开此文件的句柄时使用的标志。 - Darin Dimitrov
@DarinDimitrov 那么,我该如何验证这个标志呢? - TtT23
如果您拥有另一个进程的源代码,您可以简单地查看它,或者您可以使用诸如SysInternals Process Monitor之类的工具,然后查找对该进程上的CreateFile或CreateFileEx Win32 API的调用。然后,它将向您提供传递给此函数的参数以及使用的不同标志。 - Darin Dimitrov
你也许可以通过虚拟化另一个进程正在写入的位置来解决这个问题(在逻辑目录和逻辑磁盘之间添加一个抽象层)。虽然这是杀鸡焉用牛刀,而且如果那个进程写得不好的话,你可能会导致其以有趣和异常的方式崩溃。如果你真的想要这样做,请参考这篇文章:http://www.codeproject.com/Articles/21329/QVFS-A-FAT32-Based-Virtual-File-System-Powered-by。 - Basic
1个回答

0

为什么不直接用空字符串覆盖txt文件呢?

System.IO.File.WriteAllText("filepath to the txt doc", emptystring make sure to initialize);

1
我怀疑问题在于 OP 没有获得文件的写入权限,因此不能删除或覆盖。 - Basic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接