合并文件算法

本文关键字:算法 文件 合并 | 更新日期: 2023-09-27 18:16:39

我正在编写一个针对特定文件夹进行轮询的Windows服务。该目录包含各种文件,每个文件派生于前面的拆分操作:

输入文件夹:

  • FILE_A_PART_1_OF_2.txt
  • FILE_A_PART_2_OF_2.txt
  • FILE_B_PART_1_OF_3.txt
  • FILE_B_PART_2_OF_3.txt
  • FILE_C_PART_2_OF_3.txt
  • FILE_C_PART_3_OF_3.txt
  • FILE_D_PART_1_OF_3.txt
  • FILE_D_PART_3_OF_3.txt
  • FILE_E_PART_1_OF_1.txt

服务应该能够只合并完整的文件:

输出文件夹(合并操作后):

  • FILE_A.txt
  • FILE_E.txt

输入文件夹(合并操作后)

  • FILE_B_PART_1_OF_3.txt
  • FILE_B_PART_2_OF_3.txt
  • FILE_C_PART_2_OF_3.txt
  • FILE_C_PART_3_OF_3.txt
  • FILE_D_PART_1_OF_3.txt
  • FILE_D_PART_3_OF_3.txt

不幸的是,我不得不使用框架2.0。语言是c#。我知道这不是一个复杂的算法,但不知怎的,我就是找不到正确的方向。合并操作并不重要,因此可以表示为:

Merge(string[] filesPart)Merge(List<string> filesPart)

提前感谢。

合并文件算法

首先,用Directory.GetFiles()抓取所有文件

然后你的主要工具将是Dictionary<>类。
我想我会用这样的字体:

class BaseFile
{   
   public int Total { ... }     
   public List<string> Parts { ... }
}    
List<string, BaseFile> baseFiles = ...;

这将允许您扫描文件列表,解析名称并存储它。
扫描完成后,只处理Total == Parts.Count时的文件。

只要PART_n_OF_m中的n保持<您可以简单地对List<string> Parts进行排序。>
当它变成>= 10的时候你就需要SortedList<int, string> Parts

让您开始:给定输入文件列表,按预期输出文件对它们进行分组。然后,对于每一组,计算出您期望的文件数量。然后,对于每一组,检查你是否有所有的部分。如果您有所有的部分,请将该组中的文件放在一起。