读取元数据锁文件

时间:2014-09-25 23:35:03

标签: vb.net jpeg exif ioexception

我有以下功能来读取.jpg文件的录制日期:

 Public Shared Function GetRecordingDateOfPhoto(pathOfPhoto As String) As DateTime
            If Not IO.File.Exists(pathOfPhoto) Then
                Throw New FileNotFoundException
            End If
            Dim bitmapSource As BitmapSource = BitmapFrame.Create(New Uri(pathOfPhoto, UriKind.Relative))
            Dim bitmapMetadata As BitmapMetadata = TryCast(bitmapSource.Metadata, BitmapMetadata)
            Dim result As DateTime
            If DateTime.TryParse(bitmapMetadata.DateTaken, result) Then
                Return result
            Else
                Throw New FormatException
            End If
        End Function

此函数返回正确的日期,但是当我做这样的事情时

dim dateOfPhoto as Date = GetRecordingDateOfPhoto("foo.jpg")
My.Computer.FileSystem.MoveFile("foo.jpg", "bar.jpg")

然后我从MoveFile(...)得到一个异常:IOException(“进程无法访问文件,因为它被另一个进程使用”)

我必须在GetRecordingDateOfPhoto(...) - 函数中准确更改(可能使用/ end using?)以避免此异常吗?

非常感谢提前。

2 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为该功能已共享。无论有多少类实例,它的局部变量只存在一次。尝试不将其共享或将变量设置为Nothing。

答案 1 :(得分:0)

不幸的是,这个课程实施得非常糟糕。怪微软。 BitmapFrame.Create在内部创建一个流,但从不关闭它。

来源:microsoft .net reference source