【问题标题】:How to concatenate files in different directories together into a string array如何将不同目录中的文件连接成一个字符串数组
【发布时间】:2019-10-04 13:04:27
【问题描述】:

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#最好的方法是什么,首先连接字符串然后放入数组。

【问题讨论】:

  • List<string> files; files.AddRange(Directory.GetFiles(...));

标签: c# directory


【解决方案1】:

你可以把 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();

如果您有foldersfilters 的集合,并且您想在all foldersall filters 中获取文件,您可以使用笛卡尔连接(可以在SelectMany的帮助下实现):

  using System.Linq;

  ... 

  // I've put arrays here, but any collection 
  // which implements IEnumerable<string> will do
  string[] folders = ...
  string[] filters = ...

  string[] files = folders
    .SelectMany(folder => filters
       .SelectMany((filter) => Directory.EnumerateFiles(folder, filter))) 
    .ToArray();

【讨论】:

  • 非常感谢上面的德米特里完美地工作,一个干净简单的答案。
【解决方案2】:

如果您提到的过滤器是固定的并且它是相同的,只是结束数字不同,我会亲自使用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());
}

希望对你有帮助。

【讨论】:

  • string[] + Directory.GetFiles(...) 无法编译
  • @DmitryBychenko 抱歉打错了
猜你喜欢
  • 1970-01-01
  • 2020-04-02
  • 2022-12-17
  • 2015-05-02
  • 1970-01-01
  • 2011-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多