正在对目录的结果进行排序.C#中的GetFiles
本文关键字:排序 中的 GetFiles 结果 | 更新日期: 2023-09-27 17:58:42
我有这段代码来列出目录中的所有文件。
class GetTypesProfiler
{
static List<Data> Test()
{
List<Data> dataList = new List<Data>();
string folder = @"DIRECTORY";
Console.Write("------------------------------------------'n");
var files = Directory.GetFiles(folder, "*.dll");
Stopwatch sw;
foreach (var file in files)
{
string fileName = Path.GetFileName(file);
var fileinfo = new FileInfo(file);
long fileSize = fileinfo.Length;
Console.WriteLine("{0}/{1}", fileName, fileSize);
}
return dataList;
}
static void Main()
{
...
}
}
我需要根据文件大小或字母顺序打印出文件信息。如何从目录中对结果进行排序。GetFiles()?
使用LINQ非常简单。
要按名称排序,
var sorted = Directory.GetFiles(".").OrderBy(f => f);
要按大小排序,
var sorted = Directory.GetFiles(".").OrderBy(f => new FileInfo(f).Length);
按日期排序:(返回可枚举的FileInfo):
Directory.GetFiles(folder, "*.dll").Select(fn => new FileInfo(fn)).
OrderBy(f => f.Length);
或者,按名称订购:
Directory.GetFiles(folder, "*.dll").Select(fn => new FileInfo(fn)).
OrderBy(f => f.Name);
按文件名排序不需要创建FileInfo
实例,但如果您想动态应用不同的排序方法,最好将FileInfo
对象的数组放在适当的位置,然后仅按Length
或Name
属性对其进行OrderBy
,因此实现了此功能。此外,看起来您无论如何都要创建FileInfo
,所以无论哪种情况,最好都有一个FileInfo
对象的集合。
很抱歉,我第一次没有答对,我应该更仔细地阅读这个问题和文档。
如果您愿意,可以在FileInfo对象上使用LINQ:
var orderedFiles = Directory.GetFiles("").Select(f=> new FileInfo(f)).OrderBy(f=> f.CreationTime)
试试这个,它对我有效
[System.Runtime.InteropServices.DllImport("Shlwapi.dll", CharSet = System.Runtime.InteropServices.CharSet.Unicode)]
private static extern int StrCmpLogicalW(string psz1, string psz2);
DirectoryInfo di = new DirectoryInfo(path);
FileInfo[] arrFi = di.GetFiles("*.*");
Array.Sort(arrFi, delegate(FileInfo x, FileInfo y) { return StrCmpLogicalW(x.Name, y.Name); });
如果您只需要按文件名排序,并且文件标题支持升序或降序,则此操作有效。我添加变量是为了对源和搜索模式有更多的控制。
Using Dir = System.IO;
string Source = yourVariable;
string SearchPattern = yourVariable;
Dir.Directory.GetFiles(Source, SearchPattern, Dir.SearchOption.AllDirectories).OrderBy(s => s).ToList();
// Getting Directory object
DirectoryInfo directoryInfo = new DirectoryInfo(folderName);
// getting files for this folder
FileInfo[] files = directoryInfo.GetFiles();
// Sorting using the generic Array.Sort function based on Names comparison
Array.Sort(files, delegate (FileInfo x, FileInfo y) { return String.Compare(x.Name, y.Name); });
// Sorting using the generic Array.Sort function based on the creation date of every folder
Array.Sort(files, delegate (FileInfo x, FileInfo y) { return DateTime.Compare(x.CreationTime, y.CreationTime); });
数组排序