Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将一个目录中最旧的10个文件移动到另一个目录_C#_Directory - Fatal编程技术网

C# 如何将一个目录中最旧的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

我有一个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));
    }
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
not
OrderByDescending
您希望先使用最旧的!
OrderBy
not
OrderByDescending
您希望先使用最旧的!