【问题标题】:C# just check file md5 hash, not calculate it [closed]C# 只检查文件 md5 哈希,而不是计算它[关闭]
【发布时间】:2013-12-25 02:41:52
【问题描述】:

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

【问题讨论】:

  • 要检查文件是否匹配给定的 MD5 哈希,您需要计算该文件的 MD5 哈希。没有其他办法,除非你在某个地方预先计算好了。
  • 如果不先计算md5,你想如何检查它?
  • 你想如何在不计算的情况下检查文件的 MD5 哈希?除非您说文件“已编入索引”。
  • k,猜你的权利,我必须先计算它,基本上我不希望我的程序在桌面运行时自行移动。
  • 它不会动,因为它正在被使用,所以会引发异常。

标签: c# hash


【解决方案1】:

鉴于对 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 与先前定义的 MD5 (C# MD5 hasher example)

【讨论】:

  • 谢谢,这是有道理的。现在我是否必须重写该方法,或者我可以修改 - if (Path.GetFileName(file).ToLower() != "Whatever.exe")
  • 我不确定你的意思,你指的是哪一部分?还是说整个方法?
  • 移动文件的整个方法,不包括一个。或者我可以修改我的 if 语句以添加你给我的内容
  • 是的,你可以修改它,虽然我会重写它。检查每个文件的可用性(是否正在使用?)如果没有,请照常进行,如果确实正在使用它,请根据您当前的文件哈希检查所述文件 MD5 哈希。然而,由于它正在被使用,您无法移动它(但您可以复制它),因此只有在您想确认它确实是您正在寻找的文件时,检查 MD5 哈希才有意义。
  • 只需要检查我的 .exe 的 md5 就可以了,其他的无所谓
猜你喜欢
  • 2015-12-18
  • 2012-04-14
  • 1970-01-01
  • 2019-12-20
  • 2021-06-19
  • 2011-12-08
  • 2012-05-06
  • 1970-01-01
  • 2012-10-26
相关资源
最近更新 更多