6

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

有人可以帮忙吗?

4

7 回答 7

4

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

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

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

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

于 2012-08-03T04:41:26.813 回答
3

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

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();
于 2013-05-07T05:03:18.643 回答
2

使用 System.Linq;

DirectoryInfo info = new DirectoryInfo(""); FileInfo[] files = info.GetFiles().OrderBy(p => p.CreationTime).ToArray(); foreach (FileInfo file in files) { // DO Something... }

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

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

于 2012-08-03T03:56:49.663 回答
1

我猜你说的是 Windows 资源管理器中的查看窗格(它本质上是一个 Windows 文件管理器,但也有不同的名称)。需要进行一些澄清。您可以在各个列上应用自定义排序;此外,您可以打开多个按不同列排序的查看窗格(窗口)。因此,问题定义有点不清楚。

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

于 2013-05-07T05:05:50.167 回答
1

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

于 2013-05-07T05:11:38.467 回答
0

我认为您无法知道窗格中的顺序(按大小、名称或其他),您必须阅读列表,然后按照您想要的方式对其进行排序或提示用户选择排序属性。

正如 Kenny 在这里发布的Sorting Directory.GetFiles()是一种方法,无论如何我仍然认为不可能知道用户在查看窗格中选择的排序顺序。

于 2013-05-07T04:52:51.623 回答
0

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

于 2014-09-23T00:52:31.527 回答