2016-07-06 481 views
0

我需要监视一个文件夹,查看是否上传了一个或多个文件。然后我需要获取已上传的最新文件的创建日期&时间,并查看文件的创建时间是否距离当前时间超过30分钟。我已经使用FileSystemWatcher来监视文件夹,但我应该如何继续查找和比较当前时间的最新文件。在文件夹中查找文件,获取并比较在c#中创建的最新日期。

private void watch() 
{ 
    FileSystemWatcher watcher = new FileSystemWatcher(); 
    watcher.Path = path; 
    watcher.NotifyFilter = NotifyFilters.LastWrite; 
    NotifyFilters.DirectoryName; 
    watcher.Filter = "*.*"; 
    watcher.Changed += new FileSystemEventHandler(OnChanged); 
    watcher.EnableRaisingEvents = true; 
} 

Private void OnChanged(object source, FileSystemEventArgs e) 
{ 
    //Copies file to another directory. 
} 

我该怎么做在c#中。请帮忙!

+0

在这里寻找'FileSystemEventArgs'的帮助https://msdn.microsoft.com/en-us/library/system.io.filesystemeventargs(v=vs.110).aspx – GreatAndPowerfulOz

+0

但是'OnChanged'一旦创建文件就会触发(上传)=>创建时间将为“现在”。你的意思是你想检查上传过程是否花了超过30分钟?或者你究竟在干什么? – user3185569

+0

@ user3185569 Actualy即时计划运行代码作为每1小时运行的计划任务。所以我希望能够看到文件夹中创建的最新文件是否已经创建超过30分钟。 – velvt

回答

1

从您的意见,我真的不明白为什么你需要使用FileSystemWatcher。你说你每1小时有一个计划任务需要检查一个文件的创建时间目录。所以在这个任务中,只是做了如下:

// Change @"C:\" to your upload directory 
string[] files = Directory.GetFiles(@"C:\"); 

var oldestFile = files.OrderBy(path => File.GetCreationTime(path)).FirstOrDefault(); 
if (oldestFile != null) 
{ 
    var oldestDate = File.GetCreationTime(oldestFile); 

    if (DateTime.Now.Subtract(oldestDate).TotalMinutes > 30) 
    { 
     // Do Something 
    } 
} 

要过滤特定文件,使用过载:

string[] files = Directory.GetFiles(@"C:\", "*.pdf"); 
+0

如果需要过滤特定类型的文件,比如说pdf? – velvt

+0

@velvt简单,检查编辑。 – user3185569

+0

非常感谢你:) – velvt

1

在给onChanged事件:

private static void OnChanged(object source, FileSystemEventArgs e) 
    { 
     var currentTime = DateTime.Now; 
     var file = new FileInfo(e.FullPath); 
     var createdDateTime = file.CreationTime; 
     var span = createdDateTime.Subtract(currentTime); 

     if (span.Minutes > 30) 
     { 
      // your code 
     } 
    } 

要在特定的文件中筛选扩展名(例如pdf),您可以使用:

if (file.Extension == ".pdf") 
{ 

} 
相关问题