我的文件系统观察程序代码 VB.NET 有啥问题?
Posted
技术标签:
【中文标题】我的文件系统观察程序代码 VB.NET 有啥问题?【英文标题】:Whats wrong with my filesystem watcher code VB.NET?我的文件系统观察程序代码 VB.NET 有什么问题? 【发布时间】:2017-08-19 13:39:03 【问题描述】:当我的文件系统观察程序检测到病毒时,会显示一个对话框,但是当我单击删除文件选项时,它说它在我的程序中打开但在文件系统观察程序中,当我添加 openfiledialog.Dispose 函数时,它不会显示我的对话框,所以这是代码somone可以提供修复吗?代码如下。
Private Sub FileSystemWatcher1_Changed(ByVal sender As System.Object, ByVal e As System.IO.FileSystemEventArgs) Handles FileSystemWatcher1.Changed
Try
Detect.Labellastreal.Text = e.FullPath
ListBox3.Items.Add(Detect.Labellastreal.Text)
Me.OpenFileDialog3.FileName = ""
Dim scanbox As New TextBox
scanbox.Text = My.Computer.FileSystem.ReadAllText(Application.StartupPath & "\VirusList.dat").ToString
Dim md5 As New MD5CryptoServiceProvider
Dim f As New FileStream(e.FullPath, FileMode.Open, FileAccess.Read, FileShare.Read, &H2000)
f = New FileStream(e.FullPath, FileMode.Open, FileAccess.Read, FileShare.Read, &H2000)
md5.ComputeHash(f)
Dim hash As Byte() = md5.Hash
Dim buff As New StringBuilder
Dim hashByte As Byte
For Each hashByte In hash
buff.Append(String.Format("0:X2", hashByte))
Next
f.Close()
If scanbox.Text.Contains(buff.ToString) Then
Me.OpenFileDialog3.FileName = e.FullPath
Detect.ShowDialog()
WriteToLog("Virus detected")
End If
Catch exception1 As Exception
ProjectData.SetProjectError(exception1)
Dim ex As Exception = exception1
ProjectData.ClearProjectError()
End Try
End Sub
【问题讨论】:
我第一次发帖时所有的布局都错了......来自私人子是代码的开始抱歉 你正在创建两个FileStream
s,立即放弃第一个。
那么我该如何修复我的代码?
谢谢你的回复顺便说一句
在需要时不要打开两个文件流。
【参考方案1】:
首先,不要费心使用该代码。 FileSystemWatcher
不可靠,并且经常失败。
其次,删除f = New FileStream(e.FullPath, FileMode.Open, FileAccess.Read, FileShare.Read, &H2000)
,因为您调用了两次。
最后,对于具有实时保护的 Visual Basic 防病毒软件,我建议您使用 此代码:
Private Function GetMD5String(ByVal strFilename As String) As String
Dim MD5 As String = GetMD5String(strFilename)
Dim cMD5 = Security.Cryptography.MD5.Create
Dim bytHash As Byte()
Dim sb As New System.Text.StringBuilder
Dim scanbox As New TextBox
scanbox.Text = My.Computer.FileSystem.ReadAllText("viruslist.txt").ToString
Me.OpenFileDialog1.FileName = strFilename
Using cStream As New IO.FileStream(strFilename, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read)
bytHash = cMD5.ComputeHash(cStream)
End Using
For Each c In bytHash
sb.Append(c.ToString("X2"))
Next
If scanbox.Text.Contains(sb.ToString) Then
Detect.ShowDialog()
WriteToLog("Malicious exploit detected.")
Quarantinevb.ListBox1.Items.Add(strFilename)
End If
Return sb.ToString
End Function
运行良好且可靠。
【讨论】:
以上是关于我的文件系统观察程序代码 VB.NET 有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章