[英]Sorting the result of Directory.GetFiles in C#
我有這段代碼可以列出目錄中的所有文件。
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()
{
...
}
}
我需要根據文件大小或字母順序打印出文件信息。 如何對 Directory.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 object 上使用 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); });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.