2016-07-06 54 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") 
{ 

} 
相關問題