C# 如何将一个目录中最旧的10个文件移动到另一个目录
我有一个C#脚本,目前正在两个目录之间移动文件。它一次移动10个文件。问题是它正在按文件名抓取这10个文件。我希望它每次运行时都能抓取最旧的10个文件。我该怎么做 目前,我的脚本如下所示:C# 如何将一个目录中最旧的10个文件移动到另一个目录,c#,directory,C#,Directory,我有一个C#脚本,目前正在两个目录之间移动文件。它一次移动10个文件。问题是它正在按文件名抓取这10个文件。我希望它每次运行时都能抓取最旧的10个文件。我该怎么做 目前,我的脚本如下所示: string[] dirsSourceDirectory = System.IO.Directory.GetDirectories(sourceDirectory); string[] filesSourceDirectory = System.IO.Directory.GetFiles(sourceDire
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));
}
var fileInfoArray = di.GetFiles().OrderBy(fi => fi.CreationTime).Take(10).ToArray();
string[]dirsSourceDirectory=System.IO.Directory.GetDirectories(sourceDirectory);
字符串[]filesourcedirectory=System.IO.Directory.GetFiles(sourceDirectory);
字符串[]dirsDestinationDirectory=System.IO.Directory.GetDirectories(destinationDirectory);
字符串[]filedestinationdirectory=System.IO.Directory.GetFiles(destinationDirectory);
int filecount=Directory.GetFiles(destinationDirectory,“*.TRN”,SearchOption.TopDirectoryOnly).Length;
对于(int i=1;i您可以简单地使用CreationTime函数:您可以简单地使用CreationTime函数:使用LINQ获取从最旧到最新的文件数组,如下所示:
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));
}
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));
}
使用LINQ获取文件数组,按从最早到最新的顺序排列,如下所示:
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));
}
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));
}
试试林克
List<string> slist = Directory.GetFiles(@"c:\temp").OrderBy(fn => File.GetCreationTime(fn)).ToList();
List slist=Directory.GetFiles(@“c:\temp”).OrderBy(fn=>File.GetCreationTime(fn)).ToList();
试试linq
List<string> slist = Directory.GetFiles(@"c:\temp").OrderBy(fn => File.GetCreationTime(fn)).ToList();
List slist=Directory.GetFiles(@“c:\temp”).OrderBy(fn=>File.GetCreationTime(fn)).ToList();
我认为您应该添加。取(10)
以便只移动最早的十个文件。OrderBy
而不是OrderByDescending
最早的文件!您实际上可以省略ToArray()
foreach
可以直接使用IEnumerable
@FrankPI-不确定,如果GetFiles也被延迟评估,那么当文件被删除时,它可能会改变集合。回答得好。我觉得有必要指出这一点。注意(10)如果少于10,将简单地返回所有值,这避免抛出异常,与OP的for循环不同。我认为您应该添加。Take(10)
,以便只移动最早的10个文件。OrderBy
而不是OrderByDescending
最早的第一个!您实际上可以忽略ToArray()
foreach
可以直接使用IEnumerable
@FrankPI-不确定,如果GetFiles也被延迟评估,那么当文件被删除时,它可能会改变集合。回答得好。我觉得有必要指出这一点。注意(10)如果小于10,将简单地返回所有值,这避免了抛出异常,与OP的for循环不同。OrderBy
notOrderByDescending
您希望先使用最旧的!OrderBy
notOrderByDescending
您希望先使用最旧的!