微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#根据在ListView上显示之前创建的日期对文件进行排序

如何解决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 举报,一经查实,本站将立刻删除。