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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, си шарп, массив, файл




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Морской бой на Java с исходниками
Камин в саду
Исторические приключения: список книг