2017-12-14 13 views
0

나랑 벗었 어. 내가하고 싶은 일은 여러 파일로 시작하는 디렉토리를 검색/스캔 한 다음 가장 최근에 마지막으로 수정 한 파일을 가져 오는 것입니다. 예를 들어 Prefetch 디렉토리에서 "apple", "pear"및 "orange"로 시작하는 파일을 검색하려고합니다. 이 파일들은 존재하지 않을 수도 있지만, 존재한다면, 사과로 시작하는 파일과 배로 시작하는 파일이 있다고 말하면, 가장 최근에 수정 된 파일을 얻고 싶습니다. 아래의 코드를 통해이 작업을 수행 할 수 있지만 단 하나만 검색합니다.디렉토리에서 뭔가로 시작하는 파일을 검색 한 다음 가장 최근에 수정 된 파일을 얻는 방법

DirectoryInfo prefetch = new DirectoryInfo("c:\\Windows\\Prefetch"); 
FileInfo[] apple = prefetch.GetFiles("apple*"); 
if (apple.Length == 0) 
    // Do something 
else 
{ 
    double lastused = DateTime.Now.Subtract(
        apple.OrderByDescending(x => x.LastWriteTime) 
          .FirstOrDefault().LastWriteTime).TotalMinutes; 
    int final = Convert.ToInt32(lastused); 
} 

기본적으로 사과 대신 '사과', '배'등 어떻게 코드 검색을 할 수 있습니까? 위의 코드를 수정할 수 있는지 또는 완전히 변경해야하는지 여부는 알 수 없습니다. 나는 이것을 몇 시간 동안 알아 내려고 노력했지만 그것을 할 수는 없다.

List<string> files=new List<string>(); 
foreach(var str in prefixes) 
    files.AddRange(dirInfo.GetFiles(str)); 

return (from d in (from name in files select File.GetLastAccessTime(name)) orderby d descending).FirstOrDefault(); 

접두사 검색 패턴의 목록이며, dirInfo은의 DirectoryInfo입니다 :

그런 다음 해당 파일의 날짜를 확인 접두사 일치하는 파일의 집합을 만들 수
+0

GetFiles를 적절한 패턴으로 세 번 호출하고 세 가지 다른 배열에 결과를 저장 한 다음 단일 목록에 추가합니다. 이제는 내림차순으로 순서를 적용하고 목록의 첫 번째 요소를 가져올 수 있습니다. 끝 부분에있는 계산법으로 무엇을하려하는지 명확히 알지 못합니다. – Steve

+0

이것이 어떻게 작동 하는지를 알 수 있으며 문제를 해결할 수는 있지만 어떻게 저장하고 목록에 추가 할 수 있습니까? – DylanC

+0

** List **을 선언 한 다음 AddRange를 사용하여 세 세트의 파일을 같은 목록에 추가하십시오. 이제 OrderByDescending 및 FirstOrDefault가 해당 목록에서 가장 최근에 작성된 파일을 제공합니다. – Steve

답변

1

으로 내 의견에 설명 목록을 반복 할 수 있습니다. 한 패턴 만 지원됩니다.

이미 같이 다른 사람으로

, 당신은 패턴의 목록을 준비 할 수 있습니다 다음 루프에서 각 패턴에 GetFiles에 문의하십시오.

그러나, 나는 당신에게 동일한 방법을 보여 주지만, Linq는 코드의 한 라인을 함께 할 것입니다.

List<string> patterns = new List<string> { "apple*", "pear*", "orange*" }; 
DirectoryInfo prefetch = new DirectoryInfo(@"c:\Windows\Prefetch"); 

var result = patterns.SelectMany(x => prefetch.GetFiles(x)) 
        .OrderByDescending(k => k.LastWriteTime) 
        .FirstOrDefault(); 

지금, 결과는 최신 업데이트와는 FileInfo입니다. 물론 파일이 세 패턴과 일치하지 않으면 결과는이됩니다. 해당 변수를 사용하기 전에 확인해야합니다.

0

은 같은 뭔가 (테스트되지 않음) 목적.

+1

DirectoryInfo.GetFiles가 FileInfos를 반환하면 마지막 행은 필요 없지만 OrderByDescending 및 FirstOrDefault 만 필요합니다. – Steve

0

당신은 당신이 이렇게 다른 패턴으로 의에서는 FileInfo를 목록을 반환하는 DirectoryInfo.GetFiles을 사용할 수 없습니다

List<string> patterns = new List<string> { "apple*", "pear*", "orange*" }; 
    DirectoryInfo prefetch = new DirectoryInfo("c:\\Windows\\Prefetch");   

    foreach (var pattern in patterns) { 
     FileInfo[] files = prefetch.GetFiles(pattern); 
     var lastAccessed = files.OrderByDescending(x => x.LastAccessTime).FirstOrDefault(); 
     if (lastAccessed != null) { 
      var minutes = DateTime.Now.Subtract(lastAccessed.LastAccessTime).TotalMinutes; 
     } 
    }