Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#如何使用Directory.GetFiles()获取与Windows资源管理器中的顺序相同的文件?_C#_Directory - Fatal编程技术网

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

C#如何使用Directory.GetFiles()获取与Windows资源管理器中的顺序相同的文件?,c#,directory,C#,Directory,可以获取与Windows资源管理器中的顺序相同的文件 我知道“自然排序”,但这不是我需要的,我需要在Windows资源管理器中按相同属性对文件列表进行排序,例如: 如果我按属性“create date”订购了一个目录,那么我将得到一个文件列表,如下所示: name create date file size 1.txt 2012/1/1 125Kb 2.tab 201

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

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

如果我按属性“create date”订购了一个目录,那么我将得到一个文件列表,如下所示:

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=newdirectoryinfo(“”);FileInfo[]文件= info.GetFiles().OrderBy(p=>p.CreationTime.ToArray();弗雷奇 (文件中的文件信息文件){ //做点什么…}

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


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

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

HKCU\Software\Microsoft\Windows\Shell\BagMRU
HKCU\Software\Microsoft\Windows\Shell\Bags
第一个路径包含反映文件系统结构的结构,第二个路径包含有关这些项的详细信息,包括一个名为“Sort”的REG_二进制值,该值记录用于该文件夹的排序顺序


有关结构的详细信息,请参见,包括示例代码(Python)

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


由于Kenny在这里发布的是一种方法,无论如何,我仍然认为没有可能知道用户在查看窗格中选择的排序顺序。

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

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

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

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

如果您想要自然排序顺序,您应该p/调用
strmplogical w
()或找到一个托管的自然排序算法。.NET Framework中没有内置的自然排序功能。

我认为您必须为windows资源管理器编写一个外壳扩展,用于捕获列上的排序事件,并以某种结构化方式将元数据写入磁盘。您可能有多个资源管理器窗口处于打开状态,因此最好应用时间戳或id,以便了解您正在处理的资源管理器窗口。然后在应用程序中读取该元数据以获得排序顺序并相应应用。不容易但可行。

hmm…但我不想使用OrderBy()函数,我需要按照Windows资源管理器中的排序属性排序文件,例如,如果Windows资源管理器中的文件按CreationTime排序,那么我可以按CreationTime排序文件列表,如果文件按Windows资源管理器中的“文件大小”排序,我可以按“文件大小”排序文件列表…这意味着我的getfiles()函数将通过文件资源管理器中的不同排序属性返回不同的结果,请提供帮助~~@Shawnley我想在获取文件之前,您必须先获取windows资源管理器的顺序设置。正在从注册表检索信息项。如果在Windows遍历某个目录时重命名了树中的某个目录,Linq运算符是否会阻塞?虽然不那么优雅,但对我来说,与一些错误检查相一致的东西似乎更安全。你认为呢?windows资源管理器的排序顺序可以是任何东西。您希望它按什么排序?可以解释为什么需要这种功能吗?提供一些关于可能的重复的更简要的细节,你能发布被误解的解决方案的链接吗?也许我们可以翻译?这并没有被误解,事实上,像我这样的新bie很难理解。谢谢你,先生,这就是我想要的。好的,例如:这是windows自然视图窗格中的文件列表,我正在尝试对25 50 80 115 145进行排序,我想按照上面示例中所示的顺序检索文件。GetFile()按以下顺序为我提供列表115 145 25 5080@AsadWaheed正当该窗格正在进行自己的排序,您也必须这样做。我需要我的排序,我如何才能实现这种排序?@AsadWaheed Shell窗格按“自然”顺序排序,将25置于115之前,即使在词汇排序中“115”排在“25”之前。要获得正确的自然排序是很困难的,尽管搜索该术语(和C#)应该会得到一些简单的示例。您可以看到,关于从windows资源管理器中获取排序字段,在SO中有一个未回答的问题