2016-07-06 12 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' срабатывает после создания файла (загружено) => время создания будет 'Now'. Вы хотите, чтобы проверить, занят ли процесс загрузки более 30 минут? Или что именно вы после? – user3185569

+0

@ user3185569 Фактически я планирую запустить код в качестве запланированной задачи, которая будет запускаться каждые 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") 
{ 

}