- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建此函数来检查我的所有文件是否仍然正确或是否缺少某些文件。
到目前为止,我已经设法从根目录中获取了一个包含文件的列表,以及另一个包含所有哈希值的列表。
我还设法创建了一个健康的散列文本文件。其中包含 Hash 3 选项卡(因此在记事本中更容易阅读),然后是根目录中的文件名。
例如。
3914ea0985f3f67a8204685beb6d1be6 \file1.extension
2ed432f68ab6ebfc32664409482f0de2 \folder1\file2.extension
每个都在一个单独的列表中,所以现在我有 4 个列表。
我想知道我是否应该使用字典来将 4 个列表减少到 2 个字典。
因此文件名(加上任何子目录)将是键,而值将是散列。
KEY VALUE
\file1.extension 3914ea0985f3f67a8204685beb6d1be6
\folder1\file2.extension 2ed432f68ab6ebfc32664409482f0de2
我的假设是,通过执行此操作,我可以检查丢失的文件并从具有健康哈希值的字典中删除这些键。这样我就可以平等地检查现有文件。 (仅基于索引)。
下面是我当前的代码,用于获取所需的内容。
获取文件列表:
public List<string> Get_FileList(string root)
{
List<string> FileList = Directory.GetFiles(root, "*.*", SearchOption.AllDirectories).Where(name =>
{
return
!(name.EndsWith("dmp") || name.EndsWith("jpg") || //exclude dmp and image files
name.EndsWith("FileChecker.exe")); //exclude myself
}).ToList();
return FileList;
}
这会获取哈希值:
public List<string> Get_FileHash(List<string> FileList)
{
List<string> FileHash = new List<string>();
foreach (string FileName in FileList)
{
FileStream file = new FileStream(FileName, FileMode.Open, FileAccess.Read);
MD5 md5 = new MD5CryptoServiceProvider();
byte[] retVal = md5.ComputeHash(file);
file.Close();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < retVal.Length; i++)
{
sb.Append(retVal[i].ToString("x2"));
}
FileHash.Add(sb.ToString());
}
return FileHash;
}
这会得到健康的哈希值:
public void Get_HealthyHash(string file, out List<string> Healthy_FileList, out List<string> Healthy_HashList)
{
string resource= "FileCheckSum.Resources." + file;
Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource);
StreamReader reader = new StreamReader(stream);
Healthy_FileList = new List<string>();
Healthy_HashList = new List<string>();
string line;
while ((line = reader.ReadLine()) != null)
{
string[] items = line.Split(new string[] { "\t\t\t" }, StringSplitOptions.RemoveEmptyEntries);
Healthy_FileList.Add(items[1]);
Healthy_HashList.Add(items[0]);
}
}
为了确定丢失的文件,我使用了这个:
IEnumerable<string> Dif_File_list = Healthy_FileList.Except(FileList.Select(name => name.Replace(root, "")));
我必须在此处删除根目录,因为健康的哈希文件没有来自 C:\的路径
因此您可以看到 4 个列表(得到差异后是 5 个)。
我的问题:
我如何/应该继续检查现有文件是否从此时开始有效?没有丢失的文件干扰。
任何帮助,对我的功能的改进或继续的指示将不胜感激。注意 这里给出的所有代码都有效!大量文件会很慢,因为我没有添加任何类型的线程来使其更快。
最佳答案
使用字符串属性 FileName 和 HashValue 创建一个实体类 MyFileInfo。实现 IEqualityComparer,覆盖 Equals 和 GetHashCode 方法。
然后从文件中加载健康的 List
使用 LINQ 方法查找列表之间的差异。
看这里 LINQ Distinct, Except, Contains, Union, Intersect and IEqualityComparer
关于c# 文件校验和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7687313/
如何在 PHP 中生成 CRC-8 校验和? 最佳答案 function crcnifull ($dato, $byte) { static $PolyFull=0x8c; for ($i=0
我正在编写代码来使用 32 位无符号整数计算 CRC16。当尝试打印执行 CRC 操作的 XOR 函数的返回值时,它总是打印 0。我尝试了各种调试方法,例如打印语句,但是,我似乎无法弄清楚! 这是我的
ThinkPHP3.2.3验证码显示、刷新、校验 ,具体如下: 显示验证码 首先在Home/Controller下创建一个公共控制器PublicController
我想将自定义验证绑定(bind)到 TimePicker 自定义控件,但下面的代码显示“无法将内容添加到 TimePicker 的对象类型。”。
目录 Spring 校验(validator,JSR-303)实现 什么是JSR-303规范 与Spring MVC结合 实体类添加
导包和配置 导入 JSR 303 的包、hibernate valid 的包 ?
我是一名优秀的程序员,十分优秀!