C# 如何将不同目录中的文件连接到一个字符串数组中

C# 如何将不同目录中的文件连接到一个字符串数组中,c#,directory,C#,Directory,C#新手问题,我需要根据过滤器从四个文件夹中收集文件,并将它们全部放入一个数组中: string[] files = Directory.GetFiles(DirPath, Dts.Variables["User::vCSV_Folder_File_Filter_1"].Value.ToString()); string[] files = string[] + Directory.GetFiles(DirPath, Dts.Variables["User::vCSV_Folder_File_F

C#新手问题,我需要根据过滤器从四个文件夹中收集文件,并将它们全部放入一个数组中:

string[] files = Directory.GetFiles(DirPath, Dts.Variables["User::vCSV_Folder_File_Filter_1"].Value.ToString());
string[] files = string[] + Directory.GetFiles(DirPath, Dts.Variables["User::vCSV_Folder_File_Filter_2"].Value.ToString());
string[] files = string[] + Directory.GetFiles(DirPath, Dts.Variables["User::vCSV_Folder_File_Filter_3"].Value.ToString());
string[] files = string[] + Directory.GetFiles(DirPath, Dts.Variables["User::vCSV_Folder_File_Filter_4"].Value.ToString());
使用c#的最佳方法是什么,首先以某种方式连接字符串,然后放入数组。

您可以将Linq
Concat

 using System.Linq;

 ...

 string[] files = Directory.EnumerateFiles(DirPath, Dts.Variables["User::vCSV_Folder_File_Filter_1"].Value.ToString())
   .Concat(Directory.EnumerateFiles(DirPath, Dts.Variables["User::vCSV_Folder_File_Filter_2"].Value.ToString()))
   .Concat(Directory.EnumerateFiles(DirPath, Dts.Variables["User::vCSV_Folder_File_Filter_3"].Value.ToString()))
   .Concat(Directory.EnumerateFiles(DirPath, Dts.Variables["User::vCSV_Folder_File_Filter_4"].Value.ToString())) 
   .ToArray();
如果您拥有
文件夹
过滤器
的集合,并且您希望使用所有
过滤器
获取所有
文件夹
中的文件,则可以使用笛卡尔连接(这可以在
SelectMany
的帮助下实现):

使用System.Linq;
... 
//我在这里放置了数组,但任何集合
//哪个实现IEnumerable可以
字符串[]文件夹=。。。
字符串[]筛选器=。。。
字符串[]文件=文件夹
.SelectMany(文件夹=>过滤器)
.SelectMany((筛选器)=>Directory.EnumerateFiles(文件夹,筛选器)))
.ToArray();

如果您提到的过滤器是固定的,并且它位于相同的位置,只是结束数字不同,我个人会使用
for
循环来完成

const int noOfFilters = 4;
string[] files = Directory.GetFiles(DirPath,Dts.Variables["User::vCSV_Folder_File_Filter_1"].Value.ToString());
for(int i = 2; i <= noOfFilters  /*using the variables helps minimal change*/;i++)
{
    files = files  + Directory.GetFiles(DirPath, Dts.Variables["User::vCSV_Folder_File_Filter_" + i.ToString()].Value.ToString());
}
const int noOfFilters=4;
string[]files=Directory.GetFiles(DirPath,Dts.Variables[“User::vCSV_Folder_File_Filter_1”].Value.ToString());

对于(int i=2;i
列出文件;
文件.AddRange(Directory.GetFiles(…);
string[]+Directory.GetFiles(…)
不compile@DmitryBychenko很抱歉输入错误,非常感谢上面的Dmitry,它工作完美,回答简单明了。
const int noOfFilters = 4;
string[] files = Directory.GetFiles(DirPath,Dts.Variables["User::vCSV_Folder_File_Filter_1"].Value.ToString());
for(int i = 2; i <= noOfFilters  /*using the variables helps minimal change*/;i++)
{
    files = files  + Directory.GetFiles(DirPath, Dts.Variables["User::vCSV_Folder_File_Filter_" + i.ToString()].Value.ToString());
}