Birçok dosya içeren bir klasörüm var. Dizindeki dosya adlarını oluşturulma tarihine / saatine göre sıralanmış olarak almanın herhangi bir kolay yolu var mı?
Ben kullanırsanız Directory.GetFiles(), bu dosya adına göre sıralanmış dosyaları döndürür.
Birçok dosya içeren bir klasörüm var. Dizindeki dosya adlarını oluşturulma tarihine / saatine göre sıralanmış olarak almanın herhangi bir kolay yolu var mı?
Ben kullanırsanız Directory.GetFiles(), bu dosya adına göre sıralanmış dosyaları döndürür.
Yanıtlar:
bu sizin için işe yarayabilir.
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...
}
LINQ kullanmak istemiyorsanız
// 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);
});
@jing: "DirectoryInfo çözümü bundan çok daha hızlıdır (özellikle ağ yolu için)"
Bunu onaylayamıyorum. Görünüşe göre Directory.GetFiles bir dosya sistemini veya ağ önbelleğini tetikliyor. İlk istek biraz zaman alır, ancak yeni dosyalar eklenmiş olsa bile aşağıdaki istekler çok daha hızlıdır. Testimde aynı kalıplara sahip bir Directory.getfiles ve bir info.GetFiles yaptım ve her ikisi de eşit olarak çalışıyor
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
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());