我正在为我的计算机安全课程开发一个项目,我有几个问题。我有一个想法,写一个程序,将搜索整个硬盘寻找电子邮件地址。我只是在寻找以纯文本格式存储的地址,因为否则很难找到任何其他内容。我认为找到地址的最佳方法是使用正则表达式。
我在C#中编写了一个相当不错的应用程序,但我想看看是否有人有更好的想法。我完全赞成用另一种语言写这个,因为我认为C#不是最适合这种类型的东西。到目前为止,我创建的应用程序只是从C:/开始,并以递归方式查找驱动器上的所有文件,跳过那些无法访问的文件。它还会跳过512mb以上的所有常见图像,视频,音频,压缩文件。这会加快它的速度,但是大文件很可能包含一些有用的东西。生成文件列表大约需要12秒钟,我猜大约需要一个小时来检查它们。一个缺点是它在扫描时使用大约50%的CPU。
我正在寻找有关如何改进搜索的想法。是否有更快的方式,更有效的方式,更彻底的方式,这样的事情?我试图思考是否有任何方法可以判断文件是否包含纯文本字符串。如果你有任何很酷的想法,请告诉我。谢谢。
答案 0 :(得分:5)
老实说,最简单的现有方法是使用grep。当你改进你的程序时,比较你的速度,当你接近时,不要再担心优化了。或者,请查看其源代码,以获取您正在寻找的现有产品的示例。
答案 1 :(得分:1)
如其他地方所述,如果安装UNIX工具的Win32端口,则已存在此工具。或者,Windows等效项为:
for /r c:\ %i in (*.*) do findstr /i /r "regular expression" "%i"
答案 2 :(得分:0)
您应该使用grep
+ find
。 grep
针对快速搜索文件进行了优化,find
已经过优化,可以为此类内容提供相应文件的列表。人们花了很长时间来优化这些工具 - 无需重新发明轮子。