vb.net 如何以相反的字母数字顺序列出目录中的文件集合,与文件资源管理器>名称降序相同

2023-12-04

如何以与文件资源管理器名称倒序相同的反向字母数字顺序对目录文件路径列表进行排序(当单击“名称”两次时)?

当“#”后面的位数不同时,Array.Sort 方法无法正确对文件名进行排序。

例如,当视图按名称顺序排列时,文件名“Osopcoz #777 1.TXT”正确地是文件资源管理器中显示的目录中的第三个文件:

这是具有正确顺序的文件资源管理器......

enter image description here

但 Array.Sort 将此文件名放在所有文件名的末尾,其中 # 后面有两位数字

HERE IS Array.Sort with incorrect order...
enter image description here


你可以使用原生的StrCmpLogicalW()功能创建您自己的字符串比较器。它使用一种称为自然排序,这与 Explorer 使用的算法相同(很可能 Explorer 也使用这个确切的方法)。

要使其按降序排序,您只需对返回值取反即可StrCmpLogicalW().

<SuppressUnmanagedCodeSecurity()> _
Public Class NaturalSortComparer
    Implements IComparer(Of String)

    <DllImport("shlwapi.dll", CharSet:=CharSet.Unicode)> _
    Private Shared Function StrCmpLogicalW(ByVal psz1 As String, ByVal psz2 As String) As Integer
    End Function

    Public Property SortDescending As Boolean = False

    Public Sub New()
    End Sub

    Public Sub New(ByVal SortDescending As Boolean)
        Me.SortDescending = SortDescending
    End Sub

    Public Function Compare(ByVal x As String, ByVal y As String) As Integer Implements IComparer(Of String).Compare
        Dim Result As Integer = StrCmpLogicalW(x, y)
        Return If(Me.SortDescending, -Result, Result)
    End Function
End Class

Usage:

Array.Sort(myArray, New NaturalSortComparer(True)) 'True specifies descending sort order.

在线测试: https://dotnetfiddle.net/MfLaZx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vb.net 如何以相反的字母数字顺序列出目录中的文件集合,与文件资源管理器>名称降序相同 的相关文章

随机推荐

  • C# 中交错数组的内存分配与 C++ 中二维数组的内存分配

    我有一个关于 C 中的锯齿数组的问题 当我在互联网上的某个地方读到有关锯齿数组的信息时 我认为 C 中 2d 锯齿数组的内存分配与 C 中 2d 数组的内存分配相同 因为 2d 锯齿数组有一个指针数组 每个指针引用一个元素数组 例如整数元素
  • Equals 和 GetHashCode 中延迟加载的 NHibernate 属性

    下面的问题该如何处理呢 我们正在使用延迟加载NHibernate属性以及每当我们打电话时Equals or GetHashCode 使用的任何属性都将被延迟加载 可能会导致一系列延迟加载操作 急切加载可以作为替代方案 但我认为仅在特定情况下
  • 如何将数据传递到 Angular 路由组件?

    在我的 Angular 2 路线模板之一中 第一个组件 我有一个按钮 第一个组件 html div class button Pass data and route div My goal是为了实现 单击按钮 gt 路由到另一个组件 同时保
  • 无法将 ArrayList 传递给活动

    这是代码 ArrayList
  • 使用 HTTP 的 WCF 自定义用户名身份验证

    我正在尝试配置我的 WCF 服务以通过 HTTP 和我的 ASP NET 开发服务器使用自定义用户名验证器 以下是服务模型的部分
  • Python用交集合并多个列表[重复]

    这个问题在这里已经有答案了 可能的重复 Python 基于交集的简单列表合并 我有多个列表 list 1 2 3 3 5 6 8 9 10 11 12 13 是否有一种智能且快速的方法来获取至少具有一个交集的所有子列表 在我的示例中 我希望
  • 值/占位符 - 单词的不同样式

    我的占位符有问题 我想问 是否有可能在输入字段中设置值的样式 但以不同的方式设置该值的单词的样式 例如 如果我们有具有初始值的输入字段 First Name 我希望有green color for First and red color f
  • 为什么 ASP.NET FormsAuthentication cookie 无法验证用户身份?

    我有一个使用默认 SqlMembershipProvider 和 FormsAuthentication 的网站 我可以使用内置的登录控件和 或以编程方式调用所有方法来对用户进行身份验证并获得相同的结果 用户已通过身份验证并创建了 cook
  • 查找数组中的多个众数

    我正在尝试编写一个java方法来查找数组中的所有模式 我知道有一种简单的方法可以在数组中查找模式 但是当有多个单一模式时 我的方法仅输出其中一个模式 我试图找到一种方法 但不确定如何解决这个问题 谁能帮我找到数组中的所有模式 谢谢 是的 这
  • 是否有 R 函数来转义正则表达式字符的字符串

    我想构建一个正则表达式来替换一些要搜索的字符串 因此需要对这些字符串进行转义 然后才能将它们放入正则表达式中 这样如果搜索的字符串包含正则表达式字符 它仍然有效 有些语言具有可以为您执行此操作的函数 例如 pythonre escape h
  • 参数类型“T”可能寿命不够长

    我正在尝试用 Rust 编写一个小程序 但无法让它工作 我在一个较小的脚本中重现了该错误 fn main let name String from World let test simple name println Hello test
  • sed 在两个标签之间查找并替换多行

    我想找到并替换一个模式 text hold1 hold2
  • Flash Builder - 如何构建或包含 SWC

    我试图在这里重新创建本教程的现代化版本 但我在构建和引用 SWC 文件以包含在我的 Flash Builder 项目中时遇到问题 每当我尝试引用 SWC 时 Flash 都会说它 不是编译时常量 任何人都可以帮助我构建 SWC 的过程 主要
  • Zend框架文件上传非法上传

    我正在尝试使用其他文本字段以普通形式上传文件 到目前为止 文件被上传到临时文件夹 但没有上传到我的目标文件夹 我总是收到此错误 文件 上传 被非法上传 这可能是一次可能的攻击 我已经检查了临时文件的文件名 并且在正确的文件夹中具有正确的 u
  • PHP - 使用正则表达式模式删除中间的短代码和内容

    我有以下字符串 text My example text shortcode name content of shortcode shortcode name is cool 以及以下模式 pattern shortcode name 它给
  • Maven 下载的扩展名为 .lastUpdated

    我有一个带有 m2eclipse 和 subversive 的 Eclipse 设置 我从svn导入了maven2项目 但我收到错误消息 提示缺少一大堆工件 例如 缺少工件 org springframework spring test j
  • 在javascript中-1是真还是假?

    当我使用indexOf时 我无法确定 1在javascript中是真还是假 let a abc indexOf abc let b def indexOf abc console log a 0 console log b 1 consol
  • 灵活的 App Engine + 应用程序身份 (Python)

    有没有办法移植功能 from google appengine api import app identity from google appengine api import urlfetch 在灵活的环境中 我有一个在 Flex 环境上
  • C# WPF 将英文数字转换为阿拉伯数字

    我需要为我正在开发的应用程序显示阿拉伯数字字符的英文双精度字符 这是一个保存双精度数的示例类 public class Class1 private double someDouble 0 874 public double SomeDou
  • vb.net 如何以相反的字母数字顺序列出目录中的文件集合,与文件资源管理器>名称降序相同

    如何以与文件资源管理器名称倒序相同的反向字母数字顺序对目录文件路径列表进行排序 当单击 名称 两次时 当 后面的位数不同时 Array Sort 方法无法正确对文件名进行排序 例如 当视图按名称顺序排列时 文件名 Osopcoz 777 1