2013-06-02 1 views
0

получить последний измененный файл из каталога, используя код ниже:Как определить, используется ли файл на прошлой неделе, а также в прошлом месяце?

String tmpPath="C:\demotestDirectory"; 
FileInfo newestFile = GetNewestFile(new DirectoryInfo(tmpPath)); 
if (newestFile != null) 
{ 
    DateTime lastmodifiedDate = newestFile.LastAccessTime; 
    string currentMonth = DateTime.Now.Month.ToString(); 
} 

И я получить последний модифицирована подал из каталога, теперь я хочу сказать, был ли этот файл был использован или нет на прошлой неделе , а также в прошлом месяце.

Любая помощь приветствуется.

+0

Сравните два объекта DateTime ... –

+0

Я могу получить часть месяца, получив текущий месяц -1 и сравните с датой, которую у меня есть, у меня возникли проблемы с выполнением последней недели. – confusedMind

+3

Что касается 'LastAccessTime', если в реестре Windows есть' NtfsDisableLastAccessUpdate = 1', то 'LastAccessTime' не будет обновляться. – linquize

ответ

0

Используйте это, чтобы найти 7 дней назад:

DateTime.Now.Subtract(new TimeSpan(7, 0, 0, 0)); 

Обратите внимание, что вы не получать последний раз модифицирована. Вы получаете последний раз доступ к. Для использования последней модификации используйте: LastWriteTime.

Или: по вашим комментариям, что-то вроде:

DateTime.Now.Subtract(new TimeSpan((int)DateTime.Now.DayOfWeek, 0, 0, 0)); 
+0

Я не думаю, что звуки пишут, поскольку 7 дней - это не то, что я ищу, его прошлую неделю и прошлый месяц! Поэтому я не могу использовать 7 дней или 30 дней. – confusedMind

+0

В чем разница? будет изменяться в последний раз, не будет таким же, как в последний раз? – confusedMind

+0

@confusedMind Почему это отличается от месяца - что вы написали в комментарии, что вы вычитаете 30 дней? – ispiro

0
FileInfo fi = new FileInfo(/*filename*/); 
DateTime dateFile = fi.LastWriteTime; 
DateTime now = DateTime.Now; 

if (now.Year == dateFile.Year) { //same year? 
    if (now.Month == dateFile.Month) { //same month? 
     MessageBox.Show("File has been edited in this month."); 
     DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo; 
     Calendar c = dfi.Calendar; 
     int fileWeek = c.GetWeekOfYear(dateFile, dfi.CalendarWeekRule, dfi.FirstDayOfWeek); 
     int nowWeek = c.GetWeekOfYear(now, dfi.CalendarWeekRule, dfi.FirstDayOfWeek); 
     if (fileWeek == nowWeek) { //same week? 
      MessageBox.Show("File has been edited in this week."); 
     } 
    } 

} 

Этот код сначала проверяет, если файл был отредактирован в том же году. Он проверяет свой месяц. Затем он использует класс календаря с текущим DateTimeInfo (он содержит такие вещи, как: сколько дней в неделю, что является первым днем ​​недели и т. Д.). Функция GetWeekOfYear возвращает номер недели. Два целых числа сравниваются, и вы идете!

Примечание:

Вы использовали LastAccessTime, но это также обновляется, когда вы делаете маленькие вещи на файл, как щелкните его в проводнике (поэтому не очень полезно, если вы хотите знать, если пользователь действительно открыт Это). Вместо этого используйте LastWriteTime (Это изменяется, если файл был изменен).

0

вы можете сделать это:

private void fileUsage() 
{ 
    String tmpPath = "C:\\demotestDirectory"; 
    FileInfo newestFile = GetNewestFile(new DirectoryInfo(tmpPath)); 
     if (newestFile != null) 
     { 
      DateTime currunt = DateTime.Now; 
      DateTime old = newestFile.LastAccessTime; 
      System.TimeSpan t = currunt.Subtract(old); 
      double lastmodifiedDate = t.TotalMilliseconds; 
      if (lastmodifiedDate <= 604800000) 
      { 
       Console.WriteLine("The File " + newestFile.Name + " has been used at " + newestFile.LastAccessTime.ToLocalTime()); 
      } 
     } 

} 
private FileInfo GetNewestFile(DirectoryInfo directoryInfo) 
{ 
    var myFile = (from f in directoryInfo.GetFiles() 
          orderby f.LastWriteTime descending 
          select f).First(); 

    return new FileInfo(myFile.FullName); 
} 

Поскольку файл был использован на прошлой неделе это также означает, что использовался в прошлом месяце.

Смежные вопросы