많은 파일이 포함 된 폴더가 있습니다. 생성 날짜 / 시간별로 정렬 된 디렉토리에서 파일 이름을 얻는 쉬운 방법이 있습니까?
을 사용하면 Directory.GetFiles()
파일 이름별로 정렬 된 파일이 반환됩니다.
답변
이것은 당신을 위해 일할 수 있습니다.
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를 사용할 수 있습니다.
var files = Directory.GetFiles(@"C:\", "*").OrderByDescending(d => new FileInfo(d).CreationTime);
답변
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);
});
답변
마지막으로 수정 한 날짜와 해당 기간을 반환합니다.
DateTime.Now.Subtract(System.IO.File.GetLastWriteTime(FilePathwithName).Date)
답변
@jing : “DirectoryInfo 솔루션은 이것보다 훨씬 빠릅니다 (특히 네트워크 경로의 경우)”
나는 이것을 확인할 수 없다. Directory.GetFiles가 파일 시스템 또는 네트워크 캐시를 트리거하는 것처럼 보입니다. 첫 번째 요청은 시간이 걸리지 만 새 파일이 추가 된 경우에도 다음 요청은 훨씬 빠릅니다. 내 테스트에서 동일한 패턴을 가진 Directory.getfiles 및 info.GetFiles를 수행했으며 둘 다 동일하게 실행됩니다.
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
답변
성능이 문제가되는 경우 MS_DOS에서 다음 명령을 사용할 수 있습니다.
dir /OD >d:\dir.txt
이 명령 은 ** d : ** 루트에 dir.txt 파일을 생성하고 모든 파일을 날짜별로 정렬합니다. 그런 다음 코드에서 파일을 읽으십시오. 또한 * 및?로 다른 필터를 추가합니다.
답변
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());