簡體   English   中英

對 C# 中 Directory.GetFiles 的結果進行排序

[英]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對象數組放在適當的位置,然后按LengthName屬性對它們進行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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM