Mam folder zawierający wiele plików. Czy istnieje łatwy sposób na uzyskanie nazw plików w katalogu posortowanych według daty / godziny ich utworzenia?
Jeśli używam Directory.GetFiles(), zwraca pliki posortowane według nazwy pliku.
Mam folder zawierający wiele plików. Czy istnieje łatwy sposób na uzyskanie nazw plików w katalogu posortowanych według daty / godziny ich utworzenia?
Jeśli używam Directory.GetFiles(), zwraca pliki posortowane według nazwy pliku.
Odpowiedzi:
to może działać dla Ciebie.
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...
}
Jeśli nie chcesz używać 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);
});
@jing: „Rozwiązanie DirectoryInfo jest znacznie szybsze niż to (szczególnie w przypadku ścieżki sieciowej)”
Nie mogę tego potwierdzić. Wygląda na to, że Directory.GetFiles wyzwala system plików lub pamięć podręczną sieci. Pierwsze żądanie zajmuje trochę czasu, ale kolejne żądania są znacznie szybsze, nawet jeśli zostały dodane nowe pliki. W moim teście zrobiłem Directory.getfiles i info.GetFiles z tymi samymi wzorcami i oba działają jednakowo
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
Jeśli wydajność jest problemem, możesz użyć tego polecenia w MS_DOS:
dir /OD >d:\dir.txt
To polecenie generuje plik dir.txt w ** d: ** root, aby wszystkie pliki były posortowane według daty. A następnie przeczytaj plik z kodu. Dodajesz również inne filtry według * i?.
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());