C#: объединение текстовых файлов с одинаковыми именами из разных папок
Есть задача
Есть 2 папки с файлами в формате txt, некоторые текстовые файлы в этих двух папках имеют одинаковые названия. Необходимо объединить содержимое попарно из 2-х таких файлов в 1.Решение:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace inPairs { class Program { static string[] uniteTwoArrays(string[] arr1, string[] arr2) { string[] resArr = new string[arr1.Length + arr2.Length]; for (int i = 0; i < arr1.Length; i++) { resArr[i] = arr1[i]; } for (int i = arr1.Length; i < resArr.Length; i++) { resArr[i] = arr2[i - arr1.Length]; } return resArr; } static void Main(string[] args) { DirectoryInfo dir1 = new DirectoryInfo(@"путь_до_папки_№1"); DirectoryInfo dir2 = new DirectoryInfo(@"путь_до_папки_№2"); DirectoryInfo dir3 = new DirectoryInfo(@"путь_до_папки_№3"); string[] arr1 = new string[100]; string[] arr2 = new string[100]; string[] arr3 = new string[100]; int i1 = 0; int i2 = 0; int chet = 0; foreach (FileInfo files in dir1.GetFiles()) { arr1[i1] = files.Name; i1++; } foreach (FileInfo files in dir2.GetFiles()) { arr2[i2] = files.Name; i2++; } for (int u = i2; u > -1; u--) { for (int j = i1; j > -1; j--) { if (arr1[j] == arr2[u]) { arr3[chet] = arr1[j]; chet++; } } } chet = chet - 1; for (int j = chet; j > 0; j--) { string fileNameInput1 = dir1 + arr3[j]; string fileNameInput2 = dir2 + arr3[j]; string fileNameOutput = dir3 + arr3[j]; File.WriteAllLines(fileNameOutput, uniteTwoArrays(File.ReadAllLines(fileNameInput1, Encoding.GetEncoding(1251)), File.ReadAllLines(fileNameInput2, Encoding.GetEncoding(1251))), Encoding.GetEncoding(1251)); } } } }Комментарии к листингу программы выше. Метод uniteTwoArrays (строки 11-23) берет два массива и объединяет их в один - в качестве аргументов мы ему скармливаем массивы, сделанные из наименований (адресов) файлов, а на выходе получаем уже объединенный файл в третьей папке - строка 66. Однако, перед тем как скармливать, надо получить эти массивы: в строках 36-40 и 42-46 находим имена всех файлов в папках №1 и №2 соответственно. Далее циклом (строки 48-58) проходим по массивам и сравниваем их - получается третий массив, в котором уже названия только совпадающих по именам текстовых файлов. И уже циклом 61-67 соединяем файлы с названиями из этого массива - записываем новый файл в папку номер 3.
Интересно, что при сравнении массивов одно значение получается лишним - от этого мы избавляемся в строке 60. Действительно, в цикле 42-58 одно значение всегда будет повторяющимся - посмотрите на досуге. Также обратим внимание на кодировку в строке 66: вместо Encoding.GetEncoding(1251) можно использовать или Encoding.Default, или вообще ничего не ставить - если вы не знаете в какой кодировке текстовые файлы, а получающийся третий (объединенный файл) записывается в корректной кодировке.
Вот так в одной программе мы решили несколько задач на си шарп: прочитали наименования файлов в папках, записали их в массивы, сравнили, записали в третий массив и сделали один текстовый файл из двух с одинаковыми названиями. Если у ас есть вопросы, хотите что-то прокомментировать или требуется решить задачу на C#, написать программу на C#, то смело пишите на почту up777up@yandex.ru - за минимальное вознаграждение я с удовольствием вам помогу.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Читайте также:
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.