C# 模拟windows文件名称排序(使用windows自带dll)
2024-08-31 14:05:37
[DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
private static extern int StrCmpLogicalW(string psz1, string psz2);
/// <summary>
/// 根据路径查到文件,按文件名称排序,智能排序,非ASCII码排序
/// </summary>
/// <param name="pathToVersions"></param>
/// <returns></returns>
private static string[] GetFileListByPath(string pathToVersions)
{
var files = new DirectoryInfo(pathToVersions).GetFiles();
var list = files.ToList();
//根据修改时间排序,因为复制会改变创建时间,不会改变修改时间
//list.Sort((a, b) => b.LastWriteTime.CompareTo(a.LastWriteTime));
//list.Sort((a, b) => b.FullName.CompareTo(a.FullName));
//list = files.OrderBy(s => int.Parse(Regex.Match(Regex.Match(s.Name, @"\d+\.7z").Value,@"\d+").Value)).ToList();
//按windows的名称排序,abc_1.0.12.zip、abc_1.0.2.zip、abc_1.0.1.zip
list.Sort((a, b) => StrCmpLogicalW(b.Name,a.Name));
return list.Select(d => d.FullName.Replace(pathToVersions + @"\", "")).ToArray();
}
按windows的文件名称排序,abc_1.0.12.zip、abc_1.0.2.zip、abc_1.0.1.zip,非ASCII码排序。可以调整入参的顺序,实现正序和倒序。例子中为倒序。
最新文章
- Volley框架使用笔记
- js 简繁体字转换
- ubuntu14.04下安装cudnn5.1.3,opencv3.0,编译caffe及配置matlab和python接口过程记录
- paramiko 遭遇socket.error: Socket is closed 错误的解决办法
- centos搭建SVN三部曲
- 正确修改MySQL最大连接数的三种好用方案
- JavaScript中this详解
- ExtJs之Field.Trigger和Field.Spinner
- JS 网页打印解决方案
- DDD 回归具体的业务场景,Domain Model 再再重新设计
- Python库的安装方法
- [译]ASP.NET Core 2.0 系列文章目录
- Power BI连接SSAS(微软的分析服务)进行权限控制(本地部署)
- css对齐方案总结
- Nginx上部署HTTPS + HTTP2
- c++11 强类型枚举
- C++ 多用户模式下同一个exe只能运行一次
- C# Notes
- firefox native extension -- har export trigger
- BTSync 2.0 Vs. 1.4 Folders