所以我有一个方法搜索特定的文件类型并将它们移动到一个文件夹,我希望它排除一些文件。目前有文件名排除,我的问题是如何排除md5哈希,以防重命名被排除的文件。
List<string> DeskTopFiles
= Directory.GetFiles(filepath, "*.exe*", SearchOption.AllDirectories)
.ToList();
foreach (string file in DeskTopFiles)
{
if (Path.GetFileName(file).ToLower() != "Whatever.exe")
FileInfo mFile = new FileInfo(file);
if (new FileInfo(d + "\\FileHolder\\" + mFile.Name).Exists == false)
mFile.MoveTo(d + "\\FileHolder\\" + mFile.Name);
}
}
所以这是我试图让它只检查md5的部分
if (Path.GetFileName(file).ToLower() != "Whatever.exe")
编辑:我猜我必须检查我的exe的md5,所以如果它从桌面运行,我将如何阻止它移动自己。目前有!= name.exe,但我想通过md5 hash
答案 0 :(得分:0)
鉴于对OP的进一步解释,目的是将文件本身从移动中排除,并且因为它不会因为它被使用而发生,所以会抛出异常,所以我采取另一种方法,检查文件MD5哈希仅在使用时,这将大大减少检查的文件数量,从而提高性能。要检查文件是否正在使用,请使用例外:
protected virtual bool IsFileLocked(FileInfo file)
{
FileStream stream = null;
try
{
stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
catch (IOException)
{
//the file is unavailable because it is:
//still being written to
//or being processed by another thread
//or does not exist (has already been processed)
return true;
}
finally
{
if (stream != null)
stream.Close();
}
//file is not locked
return false;
}
Is there a way to check if a file is in use?
此外,如果上面的函数返回True,在你的循环中,检查它的MD5与先前定义的一个(C# MD5 hasher example)