[英]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 StrCmpLogicalW
( http://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.