Saya memiliki folder yang berisi banyak file. Apakah ada cara mudah untuk mendapatkan nama file di direktori yang diurutkan berdasarkan tanggal / waktu pembuatannya?
Jika saya menggunakan Directory.GetFiles()
, ini mengembalikan file yang diurutkan berdasarkan nama file mereka.
Jawaban:
ini bisa berhasil untuk Anda.
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... }
sumber
Anda bisa menggunakan Linq
var files = Directory.GetFiles(@"C:\", "*").OrderByDescending(d => new FileInfo(d).CreationTime);
sumber
Jika Anda tidak ingin menggunakan LINQ
// 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); });
sumber
Ini mengembalikan tanggal terakhir diubah dan usianya.
sumber
@jing: "Solusi DirectoryInfo jauh lebih cepat daripada ini (terutama untuk jalur jaringan)"
Saya tidak bisa memastikan ini. Sepertinya Directory.GetFiles memicu sistem file atau cache jaringan. Permintaan pertama membutuhkan waktu beberapa saat, tetapi permintaan berikut jauh lebih cepat, bahkan jika file baru ditambahkan. Dalam pengujian saya, saya melakukan Directory.getfiles dan info.GetFiles dengan pola yang sama dan keduanya berjalan sama
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
sumber
Jika kinerja menjadi masalah, Anda dapat menggunakan perintah ini di MS_DOS:
Perintah ini menghasilkan file dir.txt di ** d: ** root yang memiliki semua file diurutkan berdasarkan tanggal. Dan kemudian baca file dari kode Anda. Selain itu, Anda menambahkan filter lain dengan * dan?.
sumber
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());
sumber