0

我正在制作一个简单的 VB.net 应用程序,它基本上要求用户提供多个文件,然后它需要访问选定的文件并修改它们。

现在,我正在保存所选文件的完整路径,将来,应用程序将遍历每个路径,从该路径打开文件并修改它。

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

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

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

但是,由于我唯一的愿望是“保留”文件,因此在我真的不需要(还)时实际打开它们似乎很浪费。有没有办法告诉 Windows 我需要一个完整的文件?

4

2 回答 2

2

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

我不相信打开多个文件真的有什么问题(而且对于移除可移动驱动器等情况,您仍然无法做任何事情)。在过去,每个进程打开文件的数量有限制,但我不再是实际限制 -推动 Windows 的限制:句柄

于 2013-03-06T08:25:46.773 回答
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 子句 - 我对您的程序了解不多,无法推荐任何人。

于 2013-03-06T08:30:43.863 回答