2013-02-19 20 views
1

我有一个实体datetime属性ImageModifiedDate它存储图像的最后修改日期。如果我更改图像可以自动更新此属性?我的意思是可以将此属性绑定到文件(图像),并且可以在实际文件更改时自动更改该属性?如何自动更新包含文件上次修改日期的属性?

我需要这个在asp.net mvc 3应用程序,但我认为它也可以标记为C#问题。

编辑:我存储在文件流的图像,而不是在数据库

+0

哪里像驻留?在与ASP.NET应用程序相同的服务器上?你需要如何保持最新?到第二个?当你说“实体”时,你是指实体框架? – 2013-02-19 14:21:55

+0

在同一台服务器上;将是伟大的,它是一秒钟;不,我使用Linq2Sql,我的意思是我的模型 – 2013-02-19 14:22:58

+0

看看[FileSystemWatcher](http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx)类,用于监视更改文件。 – 2013-02-19 14:31:42

回答

1

这似乎是你有两件一个问题:更新数据库中的最后修改日期,并且知道该数据库有更改,然后显示更改。

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

至于在Web应用程序中显示更改,您可以让应用程序通过AJAX进行轮询,并更新显示日期的HTML。这样,您不必在日期发生变化时更新整个页面。

1

您需要通过图像检查某些服务并检查它们是否已更新。它需要做这样的事情:

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,东西沿着这些路线(记住我还没有测试此代码,但它足以让你开始):

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); 
}  
+0

我将图像存储在实际的文件流中,而不是存储在数据库中。我有成千上万的图像,如果我每分钟运行一次,我认为它会真的减慢服务器速度。还有其他方法可以做到吗?此外,我想要图像立即更新(如果它可能可以完成)。 – 2013-02-19 14:30:03

+0

可能通过使用'FileSystemWatcher'? @AlekseiChepovoi查看更新。 – 2013-02-19 14:31:53

相关问题