2013-08-21 3 views
1

현재 두 디렉토리 사이에서 파일을 이동시키는 C# 스크립트가 있습니다. 한 번에 10 개의 파일을 이동합니다. 문제는 파일 이름으로 10 개의 파일을 가져 오는 것입니다. 나는 그것이 실행될 때마다 가장 오래된 10 개의 파일을 가져오고 싶다. 어떻게해야합니까?디렉토리에서 가장 오래된 10 개의 파일을 다른 디렉토리로 이동하는 방법

현재, 제 스크립트는 다음과 같습니다

string[] dirsSourceDirectory = System.IO.Directory.GetDirectories(sourceDirectory); 
string[] filesSourceDirectory = System.IO.Directory.GetFiles(sourceDirectory); 
string[] dirsDestinationDirectory = System.IO.Directory.GetDirectories(destinationDirectory); 
string[] filesDestinationDirectory = System.IO.Directory.GetFiles(destinationDirectory); 
int filecount = Directory.GetFiles(destinationDirectory, "*.TRN", SearchOption.TopDirectoryOnly).Length; 

for (int i = 1; i <= 10; i++) 
    { 
     FileInfo[] rgfiles = di.GetFiles(); 
     rgfiles[0].MoveTo(System.IO.Path.Combine(destinationDirectory, rgfiles[0].Name)); 
    } 

감사합니다!

답변

5
var filesToMove = di 
    .GetFiles() 
    .OrderBy(f => f.CreationTime) 
    .Take(10) 
    .ToArray(); 

foreach (var rgFile in filesToMove) 
{ 
    rgfile.MoveTo(System.IO.Path.Combine(destinationDirectory, rgfile.Name)); 
} 
+1

가장 오래된 10 개의 파일 만 이동하려면'.Take (10)'을 추가해야한다고 생각합니다. – FrankPl

+0

좋은 지적, 감사합니다! – BartoszKP

+1

먼저 'OrderByDescending'보다는'OrderBy'를 먼저 사용하십시오! –

1

사용 LINQ 파일의 배열을 얻을 수있는, 가장 오래된에서 최신 항목이 같은 주문을 파일 :

foreach(var file in fileInfoArray) 
{ 
    file.MoveTo(System.IO.Path.Combine(destinationDirectory, file.Name)); 
} 
+1

'OrderBy'는 가장 오래된 것부터 먼저 원하는'OrderByDescending'이 아닙니다! –

0

일부 linq 시도

List<string> slist = Directory.GetFiles(@"c:\temp").OrderBy(fn => File.GetCreationTime(fn)).ToList(); 
관련 문제