C# 如何自动更新包含文件上次修改日期的属性?

C# 如何自动更新包含文件上次修改日期的属性?,c#,asp.net,asp.net-mvc,file,C#,Asp.net,Asp.net Mvc,File,我有一个具有datetime属性的实体ImageModifiedDate,它存储图像上次修改日期。如果我更改图像,该属性是否可以自动更新?我的意思是,这个属性可以绑定到文件(图像)吗?当实际文件更改时,它可以(自动)更改吗 在asp.net mvc 3应用程序中我需要这个,但我认为它也可以标记为c#question 已编辑:我将图像存储在filestream上,而不是存储在数据库中您似乎有两个问题:更新数据库中的上次修改日期,知道数据库已更改,然后显示更改 首先,创建一个Windows服务或类似

我有一个具有datetime属性的实体
ImageModifiedDate
,它存储图像上次修改日期。如果我更改图像,该属性是否可以自动更新?我的意思是,这个属性可以绑定到文件(图像)吗?当实际文件更改时,它可以(自动)更改吗

在asp.net mvc 3应用程序中我需要这个,但我认为它也可以标记为c#question


已编辑:我将图像存储在filestream上,而不是存储在数据库中

您似乎有两个问题:更新数据库中的上次修改日期,知道数据库已更改,然后显示更改

首先,创建一个Windows服务或类似的程序,让它使用FileSystemWatcher监视文件更改。然后,它可以用新信息更新数据库


至于显示web应用程序中的更改,您可以通过AJAX进行应用程序轮询,只需更新显示日期的HTML即可。这样,您就不必在日期更改时更新整个页面。

您需要某种服务来检查图像并查看它们是否已更新。它需要这样做:

foreach (var image in dbcontext.Images)
{
    var filename = image.Filename;
    var lastModified = System.IO.File.GetLastWriteTime(filename);

    if (lastModified != image.LastModified) 
    {
        image.LastModified = lastModified;        
    }
}

dbcontext.SaveChanges();
记住,你要做一个权衡决定。您可以让它持续运行,但这会降低服务器的速度。或者,您可以每分钟运行一次,也可以每五分钟运行一次,具体取决于您拥有的图像数量以及完成此过程所需的时间

或者,您可以使用
FileSystemWatcher
,大致如下(请记住,我还没有测试过这段代码,但已经足够让您入门了):


图像位于何处?是否与ASP.NET应用程序位于同一服务器上?你需要多了解最新情况?直到第二个?当你说“实体”时,你指的是同一服务器上的实体框架吗;最好能有一秒钟的时间;不,我使用Linq2Sql,我的意思是我的模型查看类,用于监视文件的更改。我将图像存储在实际的文件流中,而不是存储在数据库中。我有成百上千的图片,如果我每分钟都运行它,我想它会真的降低服务器的速度。还有别的办法吗?我还希望图像能够立即更新(当然,如果可能的话)。是否可以使用
FileSystemWatcher
@AlekseiChepovoi见更新。
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = "your path here";
watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
watcher.Filter = "*.jpg";

watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.Deleted += new FileSystemEventHandler(OnChanged);
watcher.Renamed += new RenamedEventHandler(OnRenamed);


private static void OnChanged(object source, FileSystemEventArgs e)
{
    // Specify what is done when a file is changed, created, or deleted.
   Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
}

private static void OnRenamed(object source, RenamedEventArgs e)
{
    // Specify what is done when a file is renamed.
    Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
}