是否有“文件夹指纹”来检测文件夹的内容在两个时间点之间是否发生了变化?我无法使用 FileSystemWatcher

问题描述 投票:0回答:1

我正在寻找最快的方法(在 C#/ASP.NET 中)来检测文件夹内的任何内容在两个时间点之间是否发生了更改。我不需要知道文件、总大小或有关文件夹的任何其他信息。我只需要知道是否有任何改变。

因为我无权访问运行此类文件夹更改检测方法的外部范围,所以我无法使用

FileSystemWatcher
,它必须在不再需要时进行处置(它实现了
IDisposable
并且由于什么的架构我需要我无法实际使用它)。

如果存在某种“文件夹指纹”GUID,如果文件夹内容发生变化,该 GUID 也会发生变化,那就太理想了。然后,我可以将最后一个指纹 GUID 与当前指纹进行比较,如果两个指纹不同,则返回

true
,表明文件夹内发生了某些变化。

理想情况下,它的工作方式与

Assembly.GetEntryAssembly().ManifestModule.ModuleVersionId
返回的值完全相同,它为您提供应用程序当前构建的“指纹”GUID,然后允许您检测应用程序是否在两个时间点之间重新编译。

类似这样的:

注意:“System.IO.GetFolderFingerprint()”是一个虚构的方法。

public static class FolderChangeChecker
{
    private const string _path = "c:/path/to/folder";    
    private static Guid _originalFingerprint = System.IO.GetFolderFingerprint(_path);    
    public static bool FolderHasChanged()
    {    
        return System.IO.GetFolderFingerprint(_path) != _originalFingerprint;
    }
}

如果有办法快速完成此操作,请告诉我。

c# asp.net asp.net-core filesystemwatcher
1个回答
0
投票

您可以枚举目录中的文件并构建一个由文件名、长度、LastWriteTimeUtc.Ticks 组成的大字符串并创建一个哈希。

fileStringSb = new StringBuilder();

foreach (var file in files)
{
    fileStringSb.Append(// file info);
}

using (var md5 = System.Security.Cryptography.MD5.Create())
{
    byte[] filesHash = fingerPrint = md5.ComputeHash(Encoding.UTF8.GetBytes(fileStringSb.ToString());
}
© www.soinside.com 2019 - 2024. All rights reserved.