gpt4 book ai didi

vb.net - VB.NET 中的文件类型检查?

转载 作者:行者123 更新时间:2023-12-02 01:10:15 25 4
gpt4 key购买 nike

我有一个图像调整大小程序并且它可以工作。问题是当用户在文件选择对话框中选择非图像文件时,它会崩溃。如何检查图像文件?

最佳答案

更新:2022-04-05

由于验证每个受支持图像的二进制结构可能不可行,因此检查文件是否包含图像的最快方法是实际加载它。如果加载成功,则有效。如果没有,那就不是。

下面的代码可用于检查文件是否包含有效图像。更新此代码以防止在调用该方法时锁定文件。它还在测试后处理资源处置( thanks for pointing out this issue user1931470 )。

Public Function IsValidImage(fileName As String) As Boolean
Dim img As Drawing.Image = Nothing
Dim isValid = False

Try
' Image.FromFile locks the file until the image is disposed.
' This might not be the wanted behaviour so it is preferable to
' open the file stream and read the image from it.
Using stream = New System.IO.FileStream(fileName, IO.FileMode.Open)
img = Drawing.Image.FromStream(stream)
isValid = True
End Using

Catch oome As OutOfMemoryException
' Image.FromStream throws an OutOfMemoryException
' if the file does not have a valid image format.
isValid = False

Finally
' clean up resources
If img IsNot Nothing Then img.Dispose()
End Try

Return isValid
End Function
<小时/>

原始答案

<小时/>

⚠️⚠️ WARNING ⚠️⚠️

This code has a bug that causes a high memory consumption when called several times in a program's lifetime.

DO NOT USE THIS CODE!!

这里是 0xA3's answer 的 VB.NET 等效项因为 OP 坚持使用 VB 版本。

Function IsValidImage(filename As String) As Boolean
Try
Dim img As System.Drawing.Image = System.Drawing.Image.FromFile(filename)
Catch generatedExceptionName As OutOfMemoryException
' Image.FromFile throws an OutOfMemoryException
' if the file does not have a valid image format or
' GDI+ does not support the pixel format of the file.
'
Return False
End Try
Return True
End Function

您可以按如下方式使用它:

If IsValidImage("c:\path\to\your\file.ext") Then
'do something
'
Else
'do something else
'
End If
<小时/>

编辑:
我不建议您检查文件扩展名。任何人都可以使用 .jpg 扩展名保存不同的文件(例如文本文档),并欺骗您的应用程序相信它是图像。

最好的方法是使用上面的函数加载图像或打开前几个字节并检查 JPEG 签名。



您可以在此处找到有关 JPEG 文件及其 header 的更多信息:

关于vb.net - VB.NET 中的文件类型检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3557874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com