我的文件系统观察程序代码 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

【问题讨论】:

我第一次发帖时所有的布局都错了......来自私人子是代码的开始抱歉 你正在创建两个FileStreams,立即放弃第一个。 那么我该如何修复我的代码? 谢谢你的回复顺便说一句 在需要时不要打开两个文件流。 【参考方案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 有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章

VB.net 和C#.net 各有啥优缺点

VB.net 和C#.net 各有啥优缺点

VB.NET 文件夹位置

为啥代码隐藏文件在 VB.NET Web 应用程序项目中不可见?

VB.Net和C#.Net有啥差异?优缺点是啥?

vbscript 和 vb.net 有啥区别?