C#에서 매개 변수로 디렉터리 경로를 가져 오는 함수를 작성하려고하며 키가 해당 디렉터리 바로 아래의 파일이고 값이있는 사전을 반환합니다. 그들의 마지막 수정 시간입니다. 이 작업은 Directory.GetFiles()와 File.GetLastWriteTime()에서 쉽게 수행 할 수 있습니다. 그러나 이것은 모든 파일에 액세스해야한다는 것을 의미하며, 이는 필자의 필요에 비해 너무 느립니다. 디렉터리에만 액세스하는 동안이 작업을 수행 할 수있는 방법이 있습니까? 파일 시스템이 이런 종류의 요구 사항을 지원합니까?디렉터리에 액세스하는 동안 디렉터리 아래에있는 모든 파일의 특성 가져 오기
일부 대답을 읽은 후 편집 : 여러분 모두, FileInfo 객체를 사용해 주셔서 감사합니다. 그래도 Directory.GetFiles() (또는 Directory.EnumerateFiles())를 사용하여 이러한 객체를 가져 오는 것은 속도가 느리고, 모든 파일에 액세스해야하는 것으로 생각됩니다. 파일 시스템이 파일 자체의 파일의 최종 수정 시간을 유지하는 경우 파일 액세스없이 해당 정보를 추출 할 수 없습니다. 이 사건이 여기 있습니까? DirectoryInfo의 GetFiles() 및 EnumerateFiles()는 모든 파일에 액세스하거나 디렉토리 항목에서 해당 정보를 가져 옵니까? 필자가 파일 이름만을 원한다면 모든 파일에 액세스하지 않고도 Directory 클래스를 사용하여이 작업을 수행 할 수 있다는 것을 알고 있습니다. 그러나 속성을 얻는 것이 더 까다로워 보입니다 ...
편집 후 henk 님의 답변 : FileInfo Object를 사용하는 것이 더 빠릅니다.
31/08/2011 17시 14분 48초
31/08/2011 17시 14분 51초
: 난 보통 뭔가를 얻을, 약 800 파일의
static void Main(string[] args)
{
Console.WriteLine(DateTime.Now);
foreach (string file in Directory.GetFiles(@"\\169.254.78.161\dir"))
{
DateTime x = File.GetLastWriteTime(file);
}
Console.WriteLine(DateTime.Now);
DirectoryInfo dirInfo2 = new DirectoryInfo(@"\\169.254.78.161\dir");
var files2 = from f in dirInfo2.EnumerateFiles()
select f;
foreach (FileInfo file in files2)
{
DateTime x = file.LastWriteTime;
}
Console.WriteLine(DateTime.Now);
}
: 나는 다음과 같은 테스트를 생성 31/08/2011 17:14:52
아니요,이 정보는 파일에 액세스 할 필요가 없으며 MFT의 디렉토리 항목 만 필요합니다. 속도가 너무 느린 경우 더 빠른 디스크가 필요합니다. –
@Yoni : 너는 어떻게/무엇을 측정하고 있니? GetFiles에 대한 호출을 각 파일을 열거 나 닫는 루프와 비교 했습니까? 루프가 두 배 오래 걸리는 반면 GetFiles()는 100 | 200 파일에 대해 거의 같은 시간이 걸릴 것으로 예상됩니다. –
당신이 옳다고 생각합니다. 나는 약간의 테스트를했는데 위의 편집을 참조하십시오. – Yoni