6 / 6 / 0
Регистрация: 23.12.2015
Сообщений: 227

Архиватор файлов

08.11.2018, 11:45. Показов 2403. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, есть такой архиватор, проблема в том что он не совсем корректно добавляет файлы в архив, логика такая -файлы имеют 2 формата данных, с "одинаковыми*" названиями до знака $, необходимо файлы с одинаковыми названиями добавить в 1 архив (12$qqq;12$ttt).
Данный код добавляет НО, не правильно сравнивает названия.
Пример скрин- в архиве должны быть только(105$***.ost & 105$***.mov)
Регулярные выражение уже смотрел, не смог исправить.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Ionic.Zip;
using System.Text.RegularExpressions;
 
namespace zipmov
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
 
        }
        private List<string> a = new List<string>();
       
        private void button1_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog fbd = new FolderBrowserDialog();
            if (fbd.ShowDialog() == DialogResult.OK)
            {
                path.Add(fbd.SelectedPath);
            }
            MessageBox.Show("Added");
 
            //FolderBrowserDialog folderBrowserDialog1 = new FolderBrowserDialog();
            // DialogResult result = folderBrowserDialog1.ShowDialog();
            //if (result == DialogResult.OK)
            //{
 
            // Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.mov", SearchOption.AllDirectories).ToList().ForEach(f => listBox1.Items.Add(f));
            // Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.mov", SearchOption.AllDirectories).ToList().ForEach(f => a.Add(f));
            // }
 
        }
 
     
 
 
        public void zip2()
        { 
            //var startKey = path.GroupBy(x => Regex.Match(x, "\\w+\\$").ToString()).Where(x => x.Count() > 1).Select(x => x.Key);
            var startKey = files.GroupBy(x => Regex.Match(x, "\\w+\\$").ToString()).Where(x => x.Count() > 1).Select(x => x.Key);
 
            foreach (var item in startKey)
            {
                var filesToZip = files.Where(x => x.Contains(item));
                string fileName = filesToZip.Select(x => Path.GetFileNameWithoutExtension(x)).First();
                ZipFile zip = new ZipFile();
                zip.AddFiles(filesToZip, "");
                zip.Save($"{this.saveZipPath}\\{fileName}.zip");
            }
 
 
        }
 
        
        
        private void button2_Click(object sender, EventArgs e)
        {
            zip2();
          
 
            MessageBox.Show("End.");
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog fbd = new FolderBrowserDialog();
            if (fbd.ShowDialog() == DialogResult.OK)
            {
                path.Add(fbd.SelectedPath);
            }
            MessageBox.Show("Added");
 
            // FolderBrowserDialog folderBrowserDialog1 = new FolderBrowserDialog();
            // DialogResult result = folderBrowserDialog1.ShowDialog();
            // if (result == DialogResult.OK)
            // {
 
            // Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.ost", SearchOption.AllDirectories).ToList().ForEach(f => listBox1.Items.Add(f));
            // Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.ost", SearchOption.AllDirectories).ToList().ForEach(f => a.Add(f));
            // }
 
        }
 
        
        public string saveZipPath { get; set; }
        
        private void button4_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog fbd1 = new FolderBrowserDialog();
            DialogResult result = fbd1.ShowDialog();
            if (result == DialogResult.OK)
            {
                this.saveZipPath = fbd1.SelectedPath;
 
 
                
            }
        }
 
        List<string> path = new List<string>();
        List<string> files = new List<string>();
 
        private void button5_Click(object sender, EventArgs e)
        {
            string[] patterns = { "*$*.ost", "*$*.mov" };
            
 
            foreach (var item in patterns)
            {
                foreach (var _path in path)
                {
                    files.AddRange(Directory.GetFiles(_path, item, SearchOption.AllDirectories));
                }
 
            }
 
            foreach (var item in files)
            {
                listBox1.Items.Add(item);
            }
 
        }
    }
}
Заранее спасибо.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.11.2018, 11:45
Ответы с готовыми решениями:

Как сделать архиватор без использования библиотек zip, для всех типов файлов?
Как сделать архиватор на c# без использования библиотек zip, для всех типов файлов?

Можно ли написать свой упаковщик файлов (архиватор)
Доброго времени суток! Вопрос: как, сделав EXE, сделать внутри него домен, для свободной вкачки в него файлов? В общем как сделать...

небольшой архиватор на С#
Есть небольшой консольный архиватор на С++. Дано задание перевести его на С#. Если кто может гляньте, пожалуйста, вроде не так сложно, но я...

8
6 / 6 / 0
Регистрация: 23.12.2015
Сообщений: 227
08.11.2018, 12:02  [ТС]
скрин (другой)
Цитата Сообщение от maksonech Посмотреть сообщение
(105$***.ost & 105$***.mov)
должно быть (10$***.ost & 10$***.mov)
Миниатюры
Архиватор файлов  
0
1524 / 515 / 126
Регистрация: 09.01.2018
Сообщений: 1,629
08.11.2018, 12:57
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
            var query = files.GroupBy(f => f.Split('$')[0]);
            foreach (var group in query)
            {
                string fileName = Path.GetFileNameWithoutExtension(group.FirstOrDefault());
                /* create zip */
 
                foreach (var item in group)
                {
                    /*  zip */
                }
             
                 /* save */
            }
0
6 / 6 / 0
Регистрация: 23.12.2015
Сообщений: 227
08.11.2018, 13:02  [ТС]
Цитата Сообщение от escoult Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
            var query = files.GroupBy(f => f.Split('$')[0]);
            foreach (var group in query)
            {
                string fileName = Path.GetFileNameWithoutExtension(group.FirstOrDefault());
                /* create zip */
 
                foreach (var item in group)
                {
                    /*  zip */
                }
             
                 /* save */
            }
Спасибо.
C#
1
 string fileName = filesToZip.Select(x => Path.GetFileNameWithoutExtension(x)).First();
Подскажите как тогда эту строку заменить (получение имени файла без пути и разрешения)
0
1524 / 515 / 126
Регистрация: 09.01.2018
Сообщений: 1,629
08.11.2018, 13:11
Она написана в коде выше
0
6 / 6 / 0
Регистрация: 23.12.2015
Сообщений: 227
08.11.2018, 13:18  [ТС]
Цитата Сообщение от escoult Посмотреть сообщение
Она написана в коде выше
Извиняюсь, не усмотрел =(

Добавлено через 5 минут
Цитата Сообщение от escoult Посмотреть сообщение
Она написана в коде выше
C#
1
 string fileName = Path.GetFileNameWithoutExtension(group.FirstOrDefault());
Ругается - 'char' не содержит определения для "FirsOrDefault" и не удалось найти метод расширения ""FirstOrDefault", принимающий тип Char
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 public void zip2()
        {
            //var startKey = path.GroupBy(x => Regex.Match(x, "\\w+\\$").ToString()).Where(x => x.Count() > 1).Select(x => x.Key);
            var startKey = files.GroupBy(x => x.Split('$')[0]).ToString();
 
            foreach (var group in startKey)
            {
                var filesToZip = files.Where(x => x.Contains(group));
                string fileName = Path.GetFileNameWithoutExtension(group.FirstOrDefault());
                foreach (var item in group)
                {
                   
                    //filesToZip.Select(x => Path.GetFileNameWithoutExtension(x)).First();
                    ZipFile zip = new ZipFile();
                    zip.AddFiles(filesToZip, "");
                    zip.Save($"{this.saveZipPath}\\{fileName}.zip");
                }
                    
            }
 
 
        }
0
1524 / 515 / 126
Регистрация: 09.01.2018
Сообщений: 1,629
08.11.2018, 13:27
maksonech, Я не писал вам в коде вот эту строку:

Цитата Сообщение от maksonech Посмотреть сообщение
C#
1
var startKey = files.GroupBy(x => x.Split('$')[0]).ToString();
Я написал

C#
1
var query = files.GroupBy(f => f.Split('$')[0]);
В ней нет метода ToString();
Он там не нужен.
Вы не можете верно переписать?
0
6 / 6 / 0
Регистрация: 23.12.2015
Сообщений: 227
08.11.2018, 13:31  [ТС]
Цитата Сообщение от escoult Посмотреть сообщение
maksonech, Я не писал вам в коде вот эту строку:



Я написал

C#
1
var query = files.GroupBy(f => f.Split('$')[0]);
В ней нет метода ToString();
Он там не нужен.
Вы не можете верно переписать?
(совсем не смотрю что делаю)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public void zip2()
        {
            //var startKey = path.GroupBy(x => Regex.Match(x, "\\w+\\$").ToString()).Where(x => x.Count() > 1).Select(x => x.Key);
            var startKey = files.GroupBy(x => x.Split('$')[0]);
 
            foreach (var group in startKey)
            {
 
                string fileName = Path.GetFileNameWithoutExtension(group.FirstOrDefault());
                var filesToZip = files.Where(x => x.Contains(group));
 
                ZipFile zip = new ZipFile();
                foreach (var item in group)
                {
                    //filesToZip.Select(x => Path.GetFileNameWithoutExtension(x)).First();
                    //ZipFile zip = new ZipFile();
                    zip.AddFiles(filesToZip, "");
                    //zip.Save($"{this.saveZipPath}\\{fileName}.zip");
                }
                zip.Save($"{this.saveZipPath}\\{fileName}.zip");
            }
 
 
        }
спасибо
C#
1
var filesToZip = files.Where(x => x.Contains(group));
как правильнее строку заменить ?
0
1524 / 515 / 126
Регистрация: 09.01.2018
Сообщений: 1,629
08.11.2018, 13:38
Лучший ответ Сообщение было отмечено maksonech как решение

Решение

Цитата Сообщение от maksonech Посмотреть сообщение
как правильнее строку заменить ?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        public void zip2()
        {
            var query = files.GroupBy(x => x.Split('$')[0]); 
 
            foreach (var group in query)
            {
                string fileName = Path.GetFileNameWithoutExtension(group.FirstOrDefault());
                ZipFile zip = new ZipFile();
                zip.AddFiles(group, "");
                zip.Save($"{this.saveZipPath}\\{fileName}.zip");
            }
 
        }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.11.2018, 13:38
Помогаю со студенческими работами здесь

Существует ли мощный архиватор на C#
Доброго времени суток уважаемые! Относительно недавно, я познакомился с очень и очень мощным (при этом ужасно медленным, но всё же,...

Реализовать свой собственный архиватор по алгоритму хаффмана
Хочу реализовать свой собственный архиватор по алгоритму хаффмана, но есть проблема, допустим я считываю с txt файла где каждый символ...

Архиватор файлов
Добрый день! Я начал изучать язык C, прочитал книгу Дейтела &quot;C для программистов&quot; и для закрепления полученных знаний решил написать...

7z архиватор - не правильная маска файлов
Добрый день имеется такой cmd файл: erase &quot;D:\111\test.zip&quot; &quot;C:\Program Files\7-Zip\7z.exe&quot; a -r -tzip -ssw...

Архиватор 7Zip - подскажите местонахождение временных файлов
Случилась такая ситуация, на основном разделе из 20 гигов осталось 300 с хвостиком метров. Юзал 7Zip, открывал им архив, находящийся в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru