Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
6 / 6 / 0
Регистрация: 23.12.2015
Сообщений: 227

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

08.11.2018, 11:45. Показов 2380. Ответов 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,614
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,614
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,614
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,614
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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru