На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

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 - за минимальное вознаграждение я с удовольствием вам помогу.




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

Читайте также:




Движение круга в замкнутой плоскости на флеш as3
BlueStacks: бесплатный эмулятор Android


© upread.ru 2013-2019
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.