vb.net - 使用 Directory.GetFiles 后如何释放对文件/文件夹的锁定?

标签 vb.net getfiles filelock

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

我的代码:

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

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

最佳答案

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

 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)

第一行创建一个新的文件流实例,然后,在可以使用它之前,第二行创建一个 NEW 实例并丢弃原始实例而不处理它。

您应该只需要这些行之一。

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

关于vb.net - 使用 Directory.GetFiles 后如何释放对文件/文件夹的锁定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23877373/

相关文章:

.net - Directory.GetFiles 一次返回一个文件吗? (。网)

vb.net - 本地化.NET;使用 ResourceManager 时的后备语言

c# - 对话框确认 Jquery Ui : Calling a VB or C# method

vb.net - linq - 从对象列表创建整数列表

c# - 如何自定义排序 Directory.GetFiles() 的返回值

C# 在不使用 System.IO.FileInfo 的情况下获取文件属性

c++ - 检查文件是否被进程文件句柄锁定

java - 在 Java 中,访问 RandomAccessFile 时从 FileChannel 获取 FileLock 的有保证的方法是什么?

java - Java 文件锁定机制(FileLock 等)的问题

vb.net - 使用 vb.net 使用 excel 工作表数据在应用程序中生成图表/图形