Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2017, 08:04   #1
desanyman
Новичок
Джуниор
 
Регистрация: 16.06.2017
Сообщений: 2
По умолчанию Запись имен папок из архива

Здравствуйте.
Есть архив с папками 2ух уровней.

Нужно сделать некую опись по вложенным папкам.
Напр, идёт архив с папками:
test.zip\city\street
test.zip\city\street2
test.zip\city2\street
test.zip\city2\street2
test.zip\city3\street4

на выходе нужно собрать в такой вид:
street: city, city2
street2: city, city2
street4: city3

Подскажите пожалуйста, как это организовать?

Так начитываю структуру
Код:
string Dir = "C:\\test.zip";
using (FileStream zipFileToOpen = new FileStream(Dir, FileMode.Open))
using (ZipArchive archive = new ZipArchive(zipFileToOpen, ZipArchiveMode.Read))
foreach (var zipArchiveEntry in archive.Entries)
{
//вот тут не знаю как собрать нужный вид
}

Последний раз редактировалось desanyman; 16.06.2017 в 08:09.
desanyman вне форума Ответить с цитированием
Старый 16.06.2017, 10:52   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Код:
using System.IO.Compression;
using System.Text.RegularExpressions;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            var reg = new Regex(@"^(.*)\/(.*)\/$");
            var col = new Dictionary<string, string>();

            using (var zip = ZipFile.Open("D:\\test\\test.zip", ZipArchiveMode.Read))
            {
                foreach (var e in zip.Entries)
                {
                    var match = reg.Match(e.FullName);
                    if (match.Success)
                    {
                        if (!col.ContainsKey(match.Groups[2].Value))
                            col[match.Groups[2].Value] = match.Groups[1].Value;
                        else
                            col[match.Groups[2].Value] += string.Format(", {0}", match.Groups[1].Value);
                    }
                }
            }

            foreach (var d in col)
            {
                Console.WriteLine("{0}: {1}", d.Key, d.Value);
            }

            Console.ReadKey();
        }
    }
}
pu4koff вне форума Ответить с цитированием
Старый 16.06.2017, 13:01   #3
desanyman
Новичок
Джуниор
 
Регистрация: 16.06.2017
Сообщений: 2
По умолчанию

pu4koff, круто Вы это регулярными.
До них еще не дошли руки попрактиковать(
Спасибо за ответ!
desanyman вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись истории просматриваемых папок в log-файл 8387 C++ Builder 5 16.12.2014 17:22
VB script для выборки имен папок Nakaz Помощь студентам 1 13.11.2013 16:57
генерирование архива CodeNOT PHP 1 10.06.2013 18:45
извлечение из архива shark666 Помощь студентам 4 04.12.2009 09:12
Распаковка архива Kashp Общие вопросы Delphi 2 23.08.2007 15:08