Vb.net 使用Directory.GetFiles后,如何释放文件/文件夹上的锁?

Vb.net 使用Directory.GetFiles后,如何释放文件/文件夹上的锁?,vb.net,getfiles,filelock,Vb.net,Getfiles,Filelock,我正在使用IO.Directory.GetFiles搜索文件夹中的文件。搜索完成后,在关闭应用程序之前,我无法使用此文件夹中的文件。我在DirectoryInfo类中没有找到任何Dispose函数,所以我的问题是:如何释放或解锁这些文件 我的代码: Dim list = IO.Directory.GetFiles(folder, "*.*", IO.SearchOption.AllDirectories) 编辑: 我再次非常仔细地检查了我的代码(我无法在另一个项目中重现我的问题),结果发现该函

我正在使用
IO.Directory.GetFiles
搜索文件夹中的文件。搜索完成后,在关闭应用程序之前,我无法使用此文件夹中的文件。我在
DirectoryInfo
类中没有找到任何
Dispose
函数,所以我的问题是:如何释放或解锁这些文件

我的代码:

Dim list = IO.Directory.GetFiles(folder, "*.*", IO.SearchOption.AllDirectories)
编辑:

我再次非常仔细地检查了我的代码(我无法在另一个项目中重现我的问题),结果发现该函数正在锁定文件:

   Public Function ComputeFileHash(ByVal filePath As String)
        Dim md5 As MD5CryptoServiceProvider = New MD5CryptoServiceProvider
        Dim f As FileStream = New FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read, 8192)
        f = New FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read, 8192)
        md5.ComputeHash(f)
        f.Close()
        f.Dispose()
        Dim hash As Byte() = md5.Hash
        Dim buff As Text.StringBuilder = New Text.StringBuilder
        Dim hashByte As Byte
        For Each hashByte In hash
            buff.Append(String.Format("{0:X2}", hashByte))
        Next
        Dim md5string As String
        md5string = buff.ToString()
        Return md5string
    End Function

真奇怪。我正在关闭
文件流
并处理整个对象,但文件仍处于锁定状态。

您正在打开两个单独的流,然后只关闭最后一个流

 Dim f As FileStream = New FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read, 8192)
 f = New FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read, 8192)
第一行创建一个新的filestream实例,然后在使用它之前,第二行创建一个新实例,并在不处理它的情况下抛出原始实例

您应该只需要其中一行

我建议:

Dim f As New FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read, 8192)

+1.你不应该得到任何锁。读不会导致锁,只有写会导致锁。你能试着提出一个简化的测试用例吗?你可以把它贴在这里吗?就像3个文件中的5个文件导致了相同的问题。在你有了这些文件的名称后,你会如何处理这些文件?我无法重现这个问题-我使用了你发布的代码获取这些名字,然后我阅读了其中两个名字的内容,所有这些都很好。我用相关信息更新了我的问题。你在使用防病毒软件吗?如果是这样的话,请尝试在访问后禁用它一段时间。谢谢。现在它就像一个符咒。如果我有足够的声誉,我会使劲按向上投票的按钮
FileSteam.Close()
使用
语句:,
iDisposable
:呃,您正在使用它们。然后还有别的问题:\n哦,对了。。。您不需要同时调用
Close()
Dispose()
。一个就够了。