如何让Windows知道我的应用程序“正在使用”某个文件?

时间:2013-03-06 08:14:37

标签: windows vb.net winforms

我正在创建一个简单的VB.net应用程序,它基本上要求用户提供多个文件,以后它将需要访问所选文件并进行修改。

现在,我正在保存所选文件的完整路径,将来,应用程序将遍历每个路径,从这样的路径打开文件,然后进行修改。

问题在于用户可以选择一个文件(以便保存完整路径),然后在应用程序修改文件之前删除或移动文件。

通常情况下,我会抛出错误提示“找不到文件”,但我的印象是Windows有一项功能会禁止您删除/移动/重命名文件,因为“程序正在使用它” - 这是一个适合我的应用程序的功能。

我对VB.NET不是很先进,但我想如果我使用我的应用程序“打开”一个文件(带有一些IO的东西),我之前提到的功能确实会触发,用户将无法修改文件,因为它被我的应用程序“打开”。

然而,由于我唯一的愿望就是“保留”文件,所以当我真的不需要时,实际打开它们似乎是非常浪费的。有没有办法告诉Windows我需要一个完整的文件?

2 个答案:

答案 0 :(得分:2)

打开文件(指定所需的共享模式)就是这样做的方法。

我不认为打开多个文件有任何问题(对于移除可移动驱动器等情况,您仍然无法做任何事情)。在过去,每个进程打开文件的数量都有限制,但我不再是实际限制 - Pushing the Limits of Windows: Handles

答案 1 :(得分:2)

有一个简单的解决方案:以独占模式打开每个文件。 它应该是这样的:

Sub test()
    Dim FS = System.IO.File.Open("path", IO.FileMode.Open, IO.FileAccess.ReadWrite, IO.FileShare.None)
End Sub

但要注意:你已经打开了一个文件句柄,如果你负责关闭文件的代码失败而没有终止应用程序文件仍然会被锁定很长时间(直到应用程序关闭)。 你可以使用using子句或try / catch / finally子句 - 我不太了解你的程序推荐任何人。