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