ディレクトリ内のすべてのファイルをリストするこのコードがあります。
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
オブジェクトの配列を配置してからOrderBy
はLength
またはName
プロパティにより、したがってこの実装です。また、とにかく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); });