c# - 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", MessageBoxButtons.OK, 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;
然后更新 files 变量分配以加载目录,按创建日期(升序)排序。
IEnumerable<string> files = new DirectoryInfo(openLotDialog.SelectedPath)
.GetFiles()
.OrderBy(x => x.CreationTime)
.Select(x => x.FullName);
请注意,可能有其他可用的属性或方法System.IO.FileInfo
可能有益于使用,而不是恢复到完整路径。
推荐阅读
- conda - 可用于 conda 的 shebang 线是什么样的?
- firebase - Flutter Firestore 使用特定键写入数据
- windows - 完全理解 .exe 文件是如何执行的
- django - Django中的嵌套循环
- java - 使用 printStackTrace 包含外部库的日志
- c# - 为什么我的代码不会删除 XML 文件中的特定元素
- python - 我想在上下文中反转这些项目
- excel - 将文档从 Excel 打印到 Word 时出现错误处理程序问题
- javascript - 从派生(ES2019 私有类)访问基类的受保护字段
- python - 尝试同时抓取两个页面时出错 - Python,bs4