C#只检查文件md5哈希,不计算它

时间:2013-12-24 18:30:14

标签: c# hash

所以我有一个方法搜索特定的文件类型并将它们移动到一个文件夹,我希望它排除一些文件。目前有文件名排除,我的问题是如何排除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

1 个答案:

答案 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