【发布时间】:2015-01-22 18:23:12
【问题描述】:
我正在尝试在 VB.NET 2010 中创建一个具有简单功能的程序。
它必须将存储在文本文件中的数千个 MD5 哈希值与程序在打开文件时自动计算的当前文件 MD5 哈希值进行比较。
就像防病毒扫描程序一样。
实际上我的程序使用ReadAllText系统将文本文件中的所有哈希添加到文本框,然后比较它们。
当 Md5 数据库(带有散列的文本文件)很小时,一切都还好,但是当文件变大时,我的程序在打开后就会冻结,所以我决定使用 ReadLine 而不是 ReadAllText。
现在我不能再使用文本框了,所以给我一个比较它们的方法。 我尝试了一种方法,但它似乎不起作用。
这是我使用 ReadLine 的代码。
问题出在If Read contains(buff.tostring) 以前是
如果 textbox.text 包含 (buff.toString)
这里是代码
Try
TextBox2.Text = e.FullPath
ListBox3.Items.Add(TextBox2.Text.ToString)
Me.OpenFileDialog1.FileName = ""
Dim reader As StreamReader = New StreamReader("def.txt")
Dim read = reader.ReadLine()
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 read.Contains(buff.ToString) Then
Me.OpenFileDialog1.FileName = e.FullPath
Form2.ShowDialog()
End If
Catch exception1 As Exception
ProjectData.SetProjectError(exception1)
Dim ex As Exception = exception1
ProjectData.ClearProjectError()
End Try
【问题讨论】:
-
使用 List(of String) 存储哈希列表的列表。或使用 File.ReadLines 将它们作为数组获取并从那里使用它
-
怎么样?更加明确。该文件非常大(20 MB)
-
如果您可以修改我的代码并将其作为答案发布就可以了。如果您这样做,我想将其标记为我的问题的答案。谢谢!
-
你真的需要文本框吗?您是否要求在屏幕上显示该信息?
-
然后使用普通的字符串变量(Dim data As String)。像文本框这样的 UI 控件应该用于在屏幕上显示信息,而不是作为数据的存储。您的代码示例不使用文本框。