【发布时间】:2014-09-07 02:10:31
【问题描述】:
我目前正在为要在网络服务器上每晚运行的网站编写一些后台进程。
我的主要问题是我需要检测图像文件在过去 24 小时内是否发生了变化。我认为使用以下代码很容易实现这一点:
DateTime lastWrite = System.IO.File.GetLastWriteTimeUtc(HttpContext.Current.Server.MapPath(image.FileName));
if (lastWrite > DateTime.UtcNow.AddHours(-24) && lastWrite < DateTime.UtcNow)
{
var a = "This item has been modified";
}
else
{
var b = "This item has not been modified";
}
但是,这似乎只会给我上次修改文件时的 DateTime。如果图像已使用诸如绘画之类的东西进行编辑,这非常有用,但它不会告诉我图像是否已使用剪切和粘贴在现有图像上被覆盖,因为修改和创建日期与原始图像相同到位。
因此,我的问题是如何检测文件(主要是图像)是否在 24 小时内真正被修改(编辑、复制、删除然后替换)?
任何帮助将不胜感激。
【问题讨论】:
-
使用GetCreationTimeUtc() 来处理Cut & Paste。
-
如果您将文件粘贴到的目录已经有一个同名文件,这将不会检测到剪切和粘贴。如果您使用“移动和替换”选项,则创建时间不会改变。
-
如果您可以接受标记文件的方法,则可以使用 NTFS 备用数据流(它就像文件本身中的隐藏标志,不能在新文件中)
-
@Xaruth - 真的很有趣,正如我读到的那样,如果文件被复制到某个地方,几天前编辑过,然后移回该目录,备用数据流将保持存在。
-
@RobChurch 是的。但是您可以在午夜检查文件是否具有“标志”(如果不是 = 新文件),并且该标志是否来自前一晚(之前已标记 24 小时),则使用新日期更新标志。这只是一个例子。所以更多是可能的:)
标签: c# windows file filesystems