繁体   English   中英

C#如何使用Directory.GetFiles()获取与Windows资源管理器中的顺序相同的文件?

[英]C# How do I use Directory.GetFiles() to get files that have the same order as in Windows explorer?

可以获取与Windows资源管理器中顺序相同的文件

我知道“自然排序”,但这不是我所需要的,我需要按Windows资源管理器中相同属性排序的文件列表,例如:

如果按属性“创建日期”订购目录,则将获得如下文件列表:

name                    create date    file size
1.txt                   2012/1/1        125Kb
2.tab                   2012/3/2        15Kb
3.bmp                   2013/5/5        26Kb

如果我的Windows资源管理器订购的文件列表的属性为“文件大小”,则文件列表为:

name                     create date    file size
2.tab                    2012/3/2        15Kb
3.bmp                    2013/5/5        26Kb
1.txt                    2012/1/1        125Kb

有人可以帮忙吗?

以下是获取按文件名排序的文件列表的方法:

var path = @"C:\windows"; // obviously change this to whatever you want
var files = System.IO.Directory.GetFiles (path).ToList ();
file.Sort();

就是这样!

这是按照给定代码示例执行的操作:

var temperaturePressureSignalFilesList = Directory.GetFiles(TemperaturePressureSignalDirectory, "*.txt", SearchOption.TopDirectoryOnly).ToList();
temperaturePressureSignalFilesList.Sort();

使用System.Linq;

DirectoryInfo info = new DirectoryInfo(“”); FileInfo [] files = info.GetFiles()。OrderBy(p => p.CreationTime).ToArray(); foreach(文件中的FileInfo文件){//做某事...}

这是按创建时间获取目录中文件的示例代码。

您可以通过相同的方式获取文件大小。

我认为这将比您预期的要复杂得多。 文件夹设置存储在注册表中的两个位置:

HKCU\Software\Microsoft\Windows\Shell\BagMRU
HKCU\Software\Microsoft\Windows\Shell\Bags

第一个路径包含反映文件系统结构的结构,第二个路径包含有关那些项目的详细信息,包括一个称为“ Sort”的REG_BINARY值,该值记录了用于该文件夹的排序顺序。

有关结构的详细信息,请参见Willi Balenthin的网站 ,包括示例代码(使用Python)

如果要自然排序顺序,则应该P / Invoke StrCmpLogicalWhttp://msdn.microsoft.com/en-us/library/bb759947.aspx )或查找托管自然排序算法。 .NET Framework中没有内置的自然排序。

我认为您不知道窗格中的顺序是什么(按大小,名称或其他方式),您必须阅读列表,然后以所需的方式对其进行排序,或者提示用户选择排序属性。

正如肯尼 Kenny)发布的Sorting Directory.GetFiles()此处介绍的一种方法,无论如何,我仍然认为没有办法知道用户在查看窗格中选择的排序顺序。

我猜您在谈论Windows资源管理器中的查看窗格(它本质上是Windows文件管理器,但也以不同的名称而闻名)。 需要澄清。 您可以在各种列上应用自定义排序。 此外,您可以在不同的列上打开多个查看窗格(窗口)。 因此,问题的定义还不清楚。

假设您知道查看窗格中的排序顺序,则可以使用System.IO.DirectoryInfo和派生的FileSystemInfo[]对象; 后者具有files.OrderBy方法。 希望这会有所帮助。 我最好的Alex

我认为您必须为Windows资源管理器编写一个shell扩展,以捕获列上的排序事件并将该元数据以某种结构化方式写入磁盘。 您可能打开了多个资源管理器窗口,因此可能是应用时间戳或ID的一个主意,以便您知道要处理哪个资源管理器窗口。 然后在您的应用中读取该元数据以获取排序顺序并相应地应用。 不容易,但可行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM