如何解决C#根据在ListView上显示之前创建的日期对文件进行排序
我创建了一个Windows应用程序,该应用程序具有可在任何Windows 10操作系统上运行的按钮功能,当用户单击该按钮时,它将从特定文件夹加载所有可用的 .map 文件名。加载可用文件后,它将以ListView形式显示所有文件,并且这些文件将基于文件命名。但是,如何使它根据创建/修改文件的日期排序?
这是我的代码:
private void btnLot_Click(object sender,EventArgs e)
{
string _ext = string.Empty;
DialogResult result = openLotDialog.ShowDialog();
if (result == System.Windows.Forms.DialogResult.Cancel)
{
return;
}
lvMapFiles.Items.Clear();
m_IUpperPCBMacData = null;
m_ILowerPCBMacData = null;
picDevTop.Invalidate();
if (System.IO.Path.GetExtension(m_FolderDialog.Selectedpath).Trim() != "")
{
MessageBox.Show(this,"Please select a folder. Don't select a file.","Open Folder Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
return;
}
string[] files = Directory.GetFiles(openLotDialog.Selectedpath);
// Add these files into list view
pathDirectory = openLotDialog.Selectedpath;
//pathDirectory = m_FolderDialog.Selectedpath;
fileExtension = string.Empty;
int i = 0;
foreach (string s in files)
{
fileName = System.IO.Path.GetFileNameWithoutExtension(s);
_ext = System.IO.Path.GetExtension(s);
if (fileName.Trim().toupper().Contains("_TEMP"))
{
System.IO.File.Delete(s);
continue;
}
if (fileName.Trim().toupper().Contains("_SUMMARY"))
{
continue;
}
if (_ext.Trim().toupper() != ".MAP")
{
continue;
}
if (fileExtension.Trim() == "")
{
fileExtension = System.IO.Path.GetExtension(s);
}
ListViewItem _lvi1 = new ListViewItem();
_lvi1.SubItems.Add("");
lvMapFiles.Items.Add(_lvi1);
lvMapFiles.Items[i].Text = fileName;
i++;
}
//m_CalcParticle = true;
CUtil.Instance.ResetDefectCodeAndDescription();
if (ReadMapFiles(pathDirectory + "\\" + lvMapFiles.Items[0].Text + fileExtension))
{
lvMapFiles.Items[0].Selected = true;
LoadDefectCodeList();
LoadDefectMenuList();
}
else
{
lvMapFiles.Items.Clear();
MessageBox.Show(this,"Fail to Open Map File. Make sure to select the correct Map file.","Read Map Error",MessageBoxIcon.Error);
}
}
假设下面的代码将读取所有可用文件并将其添加到ListView,那么有什么方法可以添加一个函数来对文件进行排序,然后再添加到ListView?
foreach (string s in files)
{
fileName = System.IO.Path.GetFileNameWithoutExtension(s);
_ext = System.IO.Path.GetExtension(s);
if (fileName.Trim().toupper().Contains("_TEMP"))
{
System.IO.File.Delete(s);
continue;
}
if (fileName.Trim().toupper().Contains("_SUMMARY"))
{
continue;
}
if (_ext.Trim().toupper() != ".MAP")
{
continue;
}
if (fileExtension.Trim() == "")
{
fileExtension = System.IO.Path.GetExtension(s);
}
ListViewItem _lvi1 = new ListViewItem();
_lvi1.SubItems.Add("");
lvMapFiles.Items.Add(_lvi1);
lvMapFiles.Items[i].Text = fileName;
i++;
}
谢谢您的帮助!
解决方法
您可以利用System.IO.DirectoryInfo
类型以及LINQ来进行排序。
如果尚不存在适当的名称空间,则首先包括它们。
using System.Collections.Generic;
using System.IO;
using System.Linq;
然后更新文件变量分配以加载目录,并按创建日期排序(升序)。
IEnumerable<string> files = new DirectoryInfo(openLotDialog.SelectedPath)
.GetFiles()
.OrderBy(x => x.CreationTime)
.Select(x => x.FullName);
请注意,System.IO.FileInfo
上可能还存在其他一些属性或方法,这些属性或方法可能比返回到完整路径更有益。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。