C# 按日期字符串对列表框排序c
我正在尝试按日期对列表框项目进行排序,但不确定如何进行排序。我已经使用正则表达式创建了一个包含日期的字符串,但是我不知道如何使用这个字符串对列表框进行排序。如有任何意见,将不胜感激。。请看下面我的代码C# 按日期字符串对列表框排序c,c#,winforms,visual-studio,listbox,C#,Winforms,Visual Studio,Listbox,我正在尝试按日期对列表框项目进行排序,但不确定如何进行排序。我已经使用正则表达式创建了一个包含日期的字符串,但是我不知道如何使用这个字符串对列表框进行排序。如有任何意见,将不胜感激。。请看下面我的代码 DirectoryInfo dir = new DirectoryInfo("../Debug/"); FileInfo[] files = dir.GetFiles("*.txt"); foreach (FileInfo file in files) { string dueDate
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);
}
我会这样做:
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);
我会这样做:
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);
您想从哪里读取日期?文件名或文件内容?@JonnyAppleseed注意在文件上使用ReadAllText.Name,它不能作为文件使用。Name将只返回其名称,而不返回路径。因此,无论是用户ReadAllTextfile,还是您想要名称本身字符串dueDate=file.name。如果您按照我对其他问题的建议为项目使用类,您可以添加日期属性,并在创建实例时填充它。这可以用于排序。从目前的情况看,你似乎在不知道自己在哪里、想去哪里的情况下跳过了问题。。提示:您很可能想切换到列表视图。@RezaAghaei字母顺序对日期无效。您想从何处读取日期?文件名或文件内容?@JonnyAppleseed注意在文件上使用ReadAllText.Name,它不能作为文件使用。Name将只返回其名称,而不返回路径。因此,无论是用户ReadAllTextfile,还是您想要名称本身字符串dueDate=file.name。如果您按照我对其他问题的建议为项目使用类,您可以添加日期属性,并在创建实例时填充它。这可以用于排序。从目前的情况看,你似乎在不知道自己在哪里、想去哪里的情况下跳过了问题。。提示:您很可能想切换到ListView。@RezaAghaei字母顺序对DatesHanks@jarednaszler不起作用。几乎可以工作,但不幸的是,它在列表框中填充了每个项目的多个实例…@JonnyAppleseed-它将在该文件夹中的每个文件中列出一个项目。是否只需要唯一的截止日期或其他信息?接收字符串未被识别为有效的日期时间。DateTime duedate=Convert.ToDateTimemat.ToString;出错;。。任何想法。。。在你的帮助下,我确实让它完美地工作了……你的每个约会都必须是00/00/0000。如果您的日期为2016年3月12日,日期为2016年4月15日,日期为2016年4月15日,日期为两位数,或上述任何组合,则您的正则表达式将不匹配。在调用regex.Match之后,可以检查mat.Success==true属性。如果不匹配,您将看不到列表框中列出的文件。@JonnyAppleseed-您是否可以使用它?如果没有,让我们结束这个问题并接受答案。否则,让我知道什么仍然不起作用,我们可以解决它。谢谢@jarednaszler。几乎可以工作,但不幸的是,它在列表框中填充了每个项目的多个实例…@JonnyAppleseed-它将在该文件夹中的每个文件中列出一个项目。是否只需要唯一的截止日期或其他信息?接收字符串未被识别为有效的日期时间。DateTime duedate=Convert.ToDateTimemat.ToString;出错;。。任何想法。。。在你的帮助下,我确实让它完美地工作了……你的每个约会都必须是00/00/0000。如果您的日期为2016年3月12日,日期为2016年4月15日,日期为2016年4月15日,日期为两位数,或上述任何组合,则您的正则表达式将不匹配。在调用regex.Match之后,可以检查mat.Success==true属性。如果不匹配,您将看不到列表框中列出的文件。@JonnyAppleseed-您是否可以使用它?如果没有,让我们结束这个问题并接受答案。否则,让我知道什么仍然不起作用,我们可以找出它。