J'ai ce code pour lister tous les fichiers dans un répertoire.
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()
{
...
}
}
J'ai besoin d'imprimer les informations sur le fichier en fonction de la taille du fichier ou de l'ordre alphabétique. Comment puis-je trier le résultat de Directory.GetFiles ()?
Très facile avec LINQ.
Pour trier par nom,
var sorted = Directory.GetFiles(".").OrderBy(f => f);
Pour trier par taille,
var sorted = Directory.GetFiles(".").OrderBy(f => new FileInfo(f).Length);
Pour classer par date: (retourne un énumérable de FileInfo):
Directory.GetFiles(folder, "*.dll").Select(fn => new FileInfo(fn)).
OrderBy(f => f.Length);
ou, pour commander par nom:
Directory.GetFiles(folder, "*.dll").Select(fn => new FileInfo(fn)).
OrderBy(f => f.Name);
Il n'est pas nécessaire de créer des instances de FileInfo
pour les classer par nom de fichier, mais si vous souhaitez appliquer différentes méthodes de tri à la volée, il est préférable d'avoir votre tableau d'objets FileInfo
en place, puis simplement OrderBy
par la propriété Length
ou Name
, d'où cette implémentation. De plus, il semble que vous allez créer FileInfo
de toute façon, il est donc préférable d'avoir une collection d'objets FileInfo
dans les deux cas.
Désolé de ne pas avoir bien compris la première fois, j'aurais dû lire la question et les documents plus attentivement.
Vous pouvez utiliser LINQ si vous le souhaitez, sur un objet FileInfo:
var orderedFiles = Directory.GetFiles("").Select(f=> new FileInfo(f)).OrderBy(f=> f.CreationTime)
essayez ça, ça marche pour moi
[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); });