我正在寻找最快的方法(在C#/ASP.NET中)来检测文件夹中的任何内容是否在两个时间点之间发生了变化。我不需要知道文件、总大小或有关文件夹的任何其他信息。我只想知道有没有什么变化。
因为我不能访问运行这种文件夹更改检测方法的外部作用域,所以我不能使用FileSystemWatcher
,它必须在不再需要时被丢弃(它实现了IDisposable
,由于我所需要的架构,我无法以实际的方式使用它)。
如果有某种“文件夹指纹”,如果文件夹的内容发生变化,它会发生变化,这将是理想的。然后,我可以将最后一个指纹与当前指纹进行比较,如果两个指纹不同,则返回true
,表明文件夹中发生了变化。
理想情况下,它的工作方式与Assembly.GetEntryAssembly().ManifestModule.ModuleVersionId
返回的值完全相同,它为您提供了应用程序当前构建的“指纹”,然后允许您检测应用程序是否在两个时间点之间重新编译。
大概是这样的:
注意: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;
}
}
请让我知道是否有一种方法可以快速做到这一点。
2条答案
按热度按时间myzjeezk1#
你可以枚举目录中的文件,并建立一个由文件名、长度、LastWriteTimeUtc.ticks组成的大字符串,然后创建一个哈希。
pbwdgjma2#
高级日志记录IIS允许您记录甚至文件系统事件,然后您可以筛选advance logging IIS的日志文件