Алгоритм объединения файлов - PullRequest
0 голосов
/ 03 декабря 2011

Я пишу службу 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

К сожалению, я должен использовать framework 2.0. Язык C #. Я знаю, что это не сложный алгоритм, но почему-то я не могу направить себя в правильном направлении. Операция слияния не важна, поэтому ее можно выразить так:

Merge(string[] filesPart) или Merge(List<string> filesPart).

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 03 декабря 2011

Сначала захватите все файлы с помощью Directory.GetFiles()

И тогда вашим основным инструментом будет класс Dictionary<>.
Я думаю, что я бы использовал что-то вроде:

class BaseFile
{   
   public int Total { ... }     
   public List<string> Parts { ... }
}    

List<string, BaseFile> baseFiles = ...;

Это позволит вам сканировать список файлов, анализировать имя и сохранять его.
После сканирования обрабатывать файл можно только при Total == Parts.Count.

Пока n в PART_n_OF_m остается <10, вы можете просто отсортировать <code>List<string> Parts.
Когда он станет> = 10, вам понадобится что-то вроде SortedList<int, string> Parts

2 голосов
/ 03 декабря 2011

Для начала: по списку входных файлов сгруппируйте их по ожидаемому выходному файлу.Затем для каждой группы определите, сколько файлов вы ожидаете.Затем для каждой группы проверьте, есть ли у вас все части.Если у вас есть все части, объедините файлы в этой группе вместе.

...