получение имен файлов в зависимости от выбранного элемента в выпадающем списке - PullRequest
1 голос
/ 12 октября 2011

Я думаю, что это большая проблема ....

У меня есть такой путь ... "C: \ restore \ restoreb \"

По этому пути у меня есть такие файлы ..

 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 ]

3 голосов
/ 13 октября 2011

Я бы сделал это так:

    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

РЕДАКТИРОВАТЬ: Исправлена ​​проблема выбора месяца, которую вы видите в СС, и добавлен выбор года.

1 голос
/ 12 октября 2011

Используйте код от Правина,

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 месяцев после ''

1 голос
/ 12 октября 2011

Полагаю, вы можете использовать что-то вроде ниже, чтобы извлечь дату из строки.

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

Надеюсь, это поможет !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...