2016-04-15 107 views
1

我试图按日期排序listBox项目,但不知道如何做到这一点。我已经设法创建一个字符串包含使用正则表达式的日期,但我不知道如何使用此字符串排序列表框。任何意见将不胜感激..请参阅下面我的代码。按日期排序listBox字符串c#

DirectoryInfo dir = new DirectoryInfo("../Debug/"); 
FileInfo[] files = dir.GetFiles("*.txt"); 

foreach (FileInfo file in files) 
{ 
    string dueDate = File.ReadAllText(file.Name); 

    Regex regex = new Regex(@"\d{2}/\d{2}/\d{4}"); 
    Match mat = regex.Match(dueDate); 

    string duedate = mat.ToString();//string containing date 
    listBox1.Items.Add(file); 
} 
+0

你想去哪儿来读取日期?文件名或文件内容? – C4u

+0

[按字母顺序显示ListBox中显示的内容](http://stackoverflow.com/questions/33963484/showing-what-is-displayed-in-listbox-in-alphabetical-order) –

+0

@JonnyAppleseed保重你,在'file.Name'上使用'ReadAllText',它不能工作,因为'file.Name'将只返回它的名字,而不是路径。所以无论是用户'ReadAllText(file)'还是你想要这个名字'字符串dueDate = file.Name'。 – C4u

回答

0

这是我会怎么处理它:

DirectoryInfo dir = new DirectoryInfo(@"../Debug/"); 
FileInfo[] files = dir.GetFiles("*.txt"); 
Dictionary<FileInfo, DateTime> filesWithDueDate = new Dictionary<FileInfo, DateTime>(); 

foreach (FileInfo file in files) 
{ 
    string dueDate = File.ReadAllText(file.FullName); 

    Regex regex = new Regex(@"\d{2}/\d{2}/\d{4}"); 
    Match mat = regex.Match(dueDate); 

    DateTime duedate = Convert.ToDateTime(mat.ToString()); 

    filesWithDueDate.Add(file, duedate); 
} 

var sortedFiles = filesWithDueDate.OrderBy(a => a.Value).Select(b => b.Key.Name).ToArray(); 

listBox1.Items.AddRange(sortedFiles); 
+0

谢谢@jarednaszler。几乎可以工作,不幸的是它已经填充了每个项目的多个实例的列表框..... – JonnyAppleseed

+0

@JonnyAppleseed - 它将列出该文件夹中每个文件的一个项目。你只需要独特的截止日期或其他东西? – jaredbaszler

+0

接收“字符串未被识别为有效的日期时间”。错误“DateTime duedate = Convert.ToDateTime(mat.ToString());”..任何想法......我确实让你的帮助完美无缺地工作...... – JonnyAppleseed