it-swarm.com.de

Dateien nach Erstellungsdatum in .NET abrufen

Ich habe einen Ordner, der viele Dateien enthält. Gibt es eine einfache Möglichkeit, die Dateinamen im Verzeichnis nach Erstellungsdatum und -zeit zu sortieren?

Wenn ich Directory.GetFiles() verwende, werden die Dateien nach ihrem Dateinamen sortiert angezeigt.

75
Senseful

das könnte für Sie funktionieren.

using System.Linq;

DirectoryInfo info = new DirectoryInfo("PATH_TO_DIRECTORY_HERE");
FileInfo[] files = info.GetFiles().OrderBy(p => p.CreationTime).ToArray();
foreach (FileInfo file in files)
{
    // DO Something...
}
162
George Taskos

Sie können Linq verwenden

var files = Directory.GetFiles(@"C:\", "*").OrderByDescending(d => new FileInfo(d).CreationTime);
39
Sev

Wenn Sie LINQ nicht verwenden möchten

// Get the files
DirectoryInfo info = new DirectoryInfo("path/to/files"));
FileInfo[] files = info.GetFiles();

// Sort by creation-time descending 
Array.Sort(files, delegate(FileInfo f1, FileInfo f2)
{
    return f2.CreationTime.CompareTo(f1.CreationTime);
});
8
Henrik

Dies gibt das letzte Änderungsdatum und sein Alter zurück.

DateTime.Now.Subtract(System.IO.File.GetLastWriteTime(FilePathwithName).Date)
4
BMG

@jing: "Die DirectoryInfo-Lösung ist viel schneller als dies (insbesondere für den Netzwerkpfad)"

Ich kann das nicht bestätigen. Es scheint, als würde Directory.GetFiles ein Dateisystem oder einen Netzwerkcache auslösen. Die erste Anforderung dauert eine Weile, aber die folgenden Anforderungen sind viel schneller, selbst wenn neue Dateien hinzugefügt wurden. In meinem Test habe ich ein Directory.getfiles und ein info.GetFiles mit den gleichen Mustern gemacht und beide laufen gleich

GetFiles  done 437834 in00:00:20.4812480
process files  done 437834 in00:00:00.9300573
GetFiles by Dirinfo(2)  done 437834 in00:00:20.7412646
1
Passer

Wenn die Leistung ein Problem ist, können Sie diesen Befehl in MS_DOS verwenden:

dir /OD >d:\dir.txt

Dieser Befehl erzeugt eine dir.txt Datei in ** d: ** root, in der alle Dateien nach Datum sortiert sind. Und dann lesen Sie die Datei aus Ihrem Code. Sie fügen auch andere Filter durch * und? Hinzu.

0
grandhougday
            DirectoryInfo dirinfo = new DirectoryInfo(strMainPath);
            String[] exts = new string[] { "*.jpeg", "*.jpg", "*.gif", "*.tiff", "*.bmp","*.png", "*.JPEG", "*.JPG", "*.GIF", "*.TIFF", "*.BMP","*.PNG" };
            ArrayList files = new ArrayList();
            foreach (string ext in exts)
                files.AddRange(dirinfo.GetFiles(ext).OrderBy(x => x.CreationTime).ToArray());
0
Ata Hoseini