не удается получить имена файлов, зависит от времени создания файла - PullRequest
0 голосов
/ 02 ноября 2011

В настоящее время я получаю имена файлов в зависимости от времени создания файла ...

я хочу получить все файлы с 10.02.2011 по 02.11.2011 (сегодняшняя дата) (разница 30 дней)

(т.е.) я хочу получить имена файлов из (today day - 30 days)

и я хочу получить имена файлов из (today day -90 days)

для этого я так и сделал ....

private void filteringFiles()
{
  string filenamepath = @"C:\defualt\Access\backupdb\";
  List<String> listfiles = Directory.GetFiles(@"C:\defualt\Access\backupdb\", "backup-*.zip").ToList();
  List<String> files = new List<String>();
  List<String> getfiles = new List<String>();
  foreach (var allfiles in listfiles)
  {

    files.Add(Path.GetFileName(allfiles));
    //DateTime creationtime = File.GetCreationTime(files);
  }
  if (cbbackupforms.Text == "Month")
  {
    getfiles = (from string s in files where (DateTime.Now.Day - Convert.ToInt32(File.GetCreationTime(Path.Combine(filenamepath, s)).AddDays(-30)) < 1) && (DateTime.Now.Year - File.GetCreationTime(Path.Combine(filenamepath, s)).Year == 0) select s).ToList();

  }
  if (cbbackupforms.Text == "3 Months")
  {

    getfiles = (from string s in files where (DateTime.Now.Day - Convert.ToInt32(File.GetCreationTime(Path.Combine(filenamepath, s)).AddDays(-90)) < 3) && (DateTime.Now.Year - File.GetCreationTime(Path.Combine(filenamepath, s)).Year == 0) select s).ToList();

  }    

  if (cbbackupforms.Text =="6 Months")
  {
    getfiles = (from string s in files where (DateTime.Now.Day - Convert.ToInt32(File.GetCreationTime(Path.Combine(filenamepath, s)).AddDays(-180)) < 6) && (DateTime.Now.Year - File.GetCreationTime(Path.Combine(filenamepath, s)).Year == 0) select s).ToList();

  }
  if (cbbackupforms.Text == "year")
  {
    getfiles = (from string s in files where ((DateTime.Now.Month - File.GetCreationTime(Path.Combine(filenamepath, s)).Month) < 12) select s).ToList();

  } 


  listbackups.DataSource = getfiles;

}

но я получил ошибку в этой строке

(DateTime.Now.Year - File.GetCreationTime(Path.Combine(filenamepath, s)).Year == 0) select s) 

вот так ...

ERROR:{"Invalid cast from 'DateTime' to 'Int32'."}

Может ли кто-нибудь помочь с этим ... Большое спасибо заранее ...

ОБНОВЛЕНИЕ: Я все еще получаю такую ​​же ошибку, как эта ...

ERROR:{"Invalid cast from 'DateTime' to 'Int32'."}

в этой строке

getfiles = (из строки s в файлах где (DateTime.Now.Day - Convert.ToInt32 (File.GetCreationTime (Path.Combine (filenamepath, s)). AddDays (-30)) <1) && ((DateTime.Now.Year - (File.GetCreationTime (Path.Combine (путь к файлу, s))). Year) == 0) выберите s) .ToList (); </strong>

Ответы [ 2 ]

1 голос
/ 02 ноября 2011

изменить строку на

((DateTime.Now.Year - (File.GetCreationTime(Path.Combine(filenamepath, s))).Year) == 0) select s)

UPDATE:

getfiles = (from string s in files where (DateTime.Now.Day - Convert.ToInt32(File.GetCreationTime(Path.Combine(filenamepath, s)).AddDays(-30).Day) < 1) && ((DateTime.Now.Year - (File.GetCreationTime(Path.Combine(filenamepath, s))).Year) == 0) select s).ToList();
0 голосов
/ 02 ноября 2011

Пример кода: я думал о вещах VB. Но это должно делать то, что вам нужно?

        string filenamepath = @"C:\";   
        List<String> files = new List<String>();

        //change this TimeSpan based on your variable? 
        var timespan = new TimeSpan(30, 0,0,0,0);
        var dir = new DirectoryInfo(filenamepath);
        files = dir.GetFiles().Where(f => f.CreationTime.Add(timespan) > DateTime.Now).Select(f => f.Name).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...