1

我有一个 C# 脚本,它当前正在两个目录之间移动文件。它一次移动 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));
    }

谢谢!

4

4 回答 4

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));
}
于 2013-08-21T20:29:01.413 回答
1

使用 LINQ 获取文件数组,从最旧到最新排序,如下所示:

var fileInfoArray = di.GetFiles().OrderBy(fi => fi.CreationTime).Take(10).ToArray();

然后你可以遍历文件:

foreach(var file in fileInfoArray)
{
     file.MoveTo(System.IO.Path.Combine(destinationDirectory, file.Name));
}
于 2013-08-21T20:32:17.960 回答
0

您可以简单地使用 CreationTime 功能:http: //msdn.microsoft.com/en-us/library/system.io.file.getcreationtime.aspx

于 2013-08-21T20:30:34.823 回答
0

尝试一些 linq

List<string> slist = Directory.GetFiles(@"c:\temp").OrderBy(fn => File.GetCreationTime(fn)).ToList();
于 2013-08-21T20:33:51.863 回答