获取文件名取决于组合框中的选定项目

时间:2011-10-12 18:43:23

标签: c# .net winforms string file

我在想这是个大问题......

我有这样的路径......“C:\ restore \ restoredb \”

在那条路上我有这样的文件..

 restore-2011-10-12T17-16-51.zip
 restore-2011-10-11T13-24-45.zip
 restore-2011-05-11T09-45-56.zip
 restore-2011-08-11T09-08-07.zip
 restore-2010-09-11T09-45-12.zip 

我有一个表单,在那种形式我有一个列表框和组合框(cbrestore) 我有这样的组合框项目......月,3个月,6个月,一年......

我想要的是,如果我选择combobox item(month)我想显示这些日期之间存储在该文件夹中的文件名(12-10-2011 to 12-09-2011)..

如果我选择combobox item(3 months)我想在列表框中显示这些日期(12-10-2011 to 12-07-2011)..之间存储在该文件夹中的文件名

为此,我试过了......

 private void cbrestore_SelectedIndexChanged(object sender, EventArgs e)
 {
    string fullpathforfiles = @"C:\restore\restoredb\";
    string[] allfiles = Directory.GetFiles(fullpathforfiles);
    foreach (string single in allfiles)
    {
        string filenameonly = Path.GetFileName(single);     
    }
    if (cbrestore.SelectedValue == Daterange.type1)
    { 

    } 
}
struct Daterange 
{
    public const string type1 = "Month";
    public const string type2 = "3 Months";
    public const string type3 = "6 Months";
    public const string type4 = "Year";  

}

我不知道如何提取该文件名中的确切部分并添加... 我怎么能这样做..请... ..

任何建议和任何代码示例代码段对我来说都非常棒......

非常感谢.....

3 个答案:

答案 0 :(得分:3)

我会这样做:

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        List<String> t = Directory.GetFiles(@"C:\Users\justin\Desktop\New folder (2)").ToList();
        List<String> y = new List<string>();
        List<String> u = new List<string>();
        foreach (var zzz in t)
        {
            y.Add(Path.GetFileName(zzz));
        }


        if (comboBox1.Text == "Month")
        {
            u =
           (from String s in y where ((DateTime.Now.Month - DateTime.Parse(s.Substring(8, 10)).Month) < 1) && (DateTime.Now.Year - DateTime.Parse(s.Substring(8, 10)).Year == 0) select s).
               ToList();
        }
        else if (comboBox1.Text == "3 Month")
        {
            u =
           (from String s in y where ((DateTime.Now.Month - DateTime.Parse(s.Substring(8, 10)).Month) < 3) && (DateTime.Now.Year - DateTime.Parse(s.Substring(8, 10)).Year == 0) select s).
               ToList();
        }
        else if(comboBox1.Text == "1 Year")
        {
            u =
           (from String s in y where ((DateTime.Now.Month - DateTime.Parse(s.Substring(8, 10)).Month) < 12) select s).
               ToList();
        }

        listBox1.DataSource = u;

    }

结果如下:enter image description here

编辑:修正了您在SS中看到的月份问题,并添加了年份选择。

答案 1 :(得分:1)

我猜您可以使用类似下面的内容从字符串中提取日期。

    filenameonly = filenameonly.Substring(filenameonly.IndexOf("-") + 1, filenameonly.IndexOf("T") - filenameonly.IndexOf("-") - 1)

希望这会有所帮助!!

答案 2 :(得分:1)

使用Praveen的代码,

filenameonly = filenameonly.Substring(filenameonly.IndexOf("-") + 1, filenameonly.IndexOf("T") -     filenameonly.IndexOf("-") - 1)

然后将其拆分为数组filenameonly.split("-")

重新排列它们,以便您可以转换为日期并检查它是否在3个月内     

    DateTime filetime = New DateTime();
    filetime.parse(filenameonlyarray[2] + "/" + filenameonlyarray[1] + "/" + filenameonlyarray[0]);
    if (filetime.compareto(DateTime.Now.AddMonths(-3) > 0)
    {
    //within 3 months
    }

使用此日期对象,您现在可以使用它来检查它是否在''

的3个月内