【问题标题】:not able to get the file names depends upon the file creation time无法获取文件名取决于文件创建时间
【发布时间】:2011-11-02 14:51:11
【问题描述】:

目前我正在检索文件名取决于文件的创建时间...

我想要的是,我想获取从 2011 年 2 月 10 日到 2011 年 2 月 11 日(今天)的所有文件。(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 = (from string s in files where (DateTime.Now.Day - Convert.ToInt32(File.GetCreationTime(Path.Combine(filenamepath, s)).AddDays(-30))

【问题讨论】:

  • 乍一看,一切看起来都还不错,但您是否有理由不使用 DateDiff,并可能将多个 List 简化为单个 List?跨度>
  • 我不知道在这种情况下如何使用 datediff ......你能不能给这个例子提供任何 sn-p ......

标签: c# .net winforms file


【解决方案1】:

换行

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

更新:

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();

【讨论】:

  • 你还能看到我的更新吗,我遇到了与我用粗体表示的相同的错误
  • 它没有给出任何错误,但它也显示了 9 月创建的文件,但我不想显示 9 月创建的文件..你能帮忙吗.. ..
  • 你一个问题一个接一个地堆积起来......请先定义你真正想要达到的目标......
【解决方案2】:

示例代码:我在想 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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 2013-01-20
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多