I have a C# script that is currently moving files between two directories. It moves 10 files at a time. The problem is that it is grabbing the 10 files by file name. I want it to grab the oldest 10 files each time it runs. How can I do that?
Currently, my script looks like this:
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));
}
Thanks!
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));
}
Use LINQ to get the array of files, ordered from oldest to newest, like this:
var fileInfoArray = di.GetFiles().OrderBy(fi => fi.CreationTime).Take(10).ToArray();
Then you can loop through the files:
foreach(var file in fileInfoArray)
{
file.MoveTo(System.IO.Path.Combine(destinationDirectory, file.Name));
}
您可以简单地使用CreationTime函数: http : //msdn.microsoft.com/zh-cn/library/system.io.file.getcreationtime.aspx
尝试一些linq
List<string> slist = Directory.GetFiles(@"c:\temp").OrderBy(fn => File.GetCreationTime(fn)).ToList();
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.