C# 如何将不同目录中的文件连接到一个字符串数组中
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
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#的最佳方法是什么,首先以某种方式连接字符串,然后放入数组。您可以将LinqConcat
:
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());
}