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

是否可以获取与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 

有人可以帮忙吗?

使用System.Linq;

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

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

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

以下是如何获取按名称排序的文件列表:

 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(); 

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

 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,以便您知道要处理的资源管理器窗口。 然后在您的应用程序中读取该元数据以获取排序顺序并相应地应用。 不容易但可行。