gpt4 book ai didi

c# - 如何以编程方式检测哪个程序捕获了我的文件

转载 作者:行者123 更新时间:2023-11-30 12:16:24 26 4
gpt4 key购买 nike

我的程序试图将一些数据写入文本文件。但有时这个文件可以被其他一些程序独占打开。

如何以编程方式检测哪个程序捕获了我的文件?我必须知道用户友好的程序名称(这是我的第二个问题 :))。

最佳答案

您可以通过尝试打开文件时收到的 IOException 检测到它。这在多任务操作系统上是不可避免的,没有可靠的方法来实现 File.IsLocked() 方法。 Windows 没有它的 API 函数。因为如果这样的函数返回 false,另一个进程可能会中断您的程序并锁定文件。当你拿回 cpu 时,你会发现文件无论如何都被锁定了。这称为线程竞赛。

因此,使用 FileStream 构造函数打开文件。如果您想从另一个进程正在写入的文件中读取,请传递 FileShare.ReadWrite。你必须允许 ReadWrite 共享,其他进程已经获得写权限。捕获你可能得到的 IOException,你必须“稍后”再试一次。告诉用户这件事,她可能会知道如何帮助你。就像关闭另一个程序一样。

顺便说一句,Windows 不提供任何方法来查明是哪个其他进程锁定了该文件。有一些实用程序,例如 SysInterals 的 Handle 实用程序。它使用动态安装的设备驱动程序通过未记录的内部内核结构进行挖掘。没有什么是您想自己解决的。

关于c# - 如何以编程方式检测哪个程序捕获了我的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5471961/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com