问题
I have this code to list all the files in a directory.
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()
{
...
}
}
I need to print out the file info based on file size or alphabetical order. How can I sort the result from Directory.GetFiles()?
回答1:
Very easy with LINQ.
To sort by name,
var sorted = Directory.GetFiles(".").OrderBy(f => f);
To sort by size,
var sorted = Directory.GetFiles(".").OrderBy(f => new FileInfo(f).Length);
回答2:
To order by date: (returns an enumerable of FileInfo):
Directory.GetFiles(folder, "*.dll").Select(fn => new FileInfo(fn)).
OrderBy(f => f.Length);
or, to order by name:
Directory.GetFiles(folder, "*.dll").Select(fn => new FileInfo(fn)).
OrderBy(f => f.Name);
Making FileInfo
instances isn't necessary for ordering by file name, but if you want to apply different sorting methods on the fly it's better to have your array of FileInfo
objects in place and then just OrderBy
them by Length
or Name
property, hence this implementation. Also, it looks like you are going to create FileInfo
anyway, so it's better to have a collection of FileInfo
objects either case.
Sorry I didn't get it right the first time, should've read the question and the docs more carefully.
回答3:
You can use LINQ if you like, on a FileInfo object:
var orderedFiles = Directory.GetFiles("").Select(f=> new FileInfo(f)).OrderBy(f=> f.CreationTime)
回答4:
try this, it works for me
[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); });
回答5:
This works if you only need to sort by file name and the file title supports the ascending or descending logical order.I add variables to have a bit more control of the source and search pattern.
Using Dir = System.IO;
string Source = yourVariable;
string SearchPattern = yourVariable;
Dir.Directory.GetFiles(Source, SearchPattern, Dir.SearchOption.AllDirectories).OrderBy(s => s).ToList();
来源:https://stackoverflow.com/questions/6294275/sorting-the-result-of-directory-getfiles-in-c-sharp