Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
12 / 1 / 3
Регистрация: 26.06.2016
Сообщений: 87
1

Распаковка архивов в отдельные папки

06.08.2016, 16:33. Показов 1641. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
имеется архив 123.rar, в нем находятся еще 3 архива 1.rar, 2.rar и 3.rar. Необходимо распаковать 123.rar в определенную папку и потом распаковать каждый архив (1.rar, 2.rar и 3.rar) в отдельную папку (например, 1, 2 и 3 соответственно).


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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
 
namespace Распаковать_RAR
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            Process.Start("WinRAR.exe", @"e D:\extract\in\*.* D:\extract\out");
            // архивы 1.rar, 2.rar и 3.rar распаковались из 123.rar в папку D:\extract\out\
        }
    }
}
а как дальше распаковать каждый из архивов в отдельные папки я не знаю. Помогите пожалуйста с этой проблемкой

Добавлено через 5 минут
возможно нужно сделать так, чтобы следующий архив не начал распаковываться пока предыдущий не распакуется

Добавлено через 29 минут
пытался сделать вот так
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;
 
namespace Распаковать_RAR
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            Process.Start("WinRAR.exe", @"e D:\extract\in\*.* D:\extract\out");
            // архивы 1.rar, 2.rar и 3.rar распаковались из 123.rar в папку D:\extract\out\
            string[] archs = Directory.GetFiles(@"D:\extract\out");
            foreach (var fileName in archs)
            {
                Process.Start("WinRAR.exe", @"e D:\extract\out\*.* D:\extract\out\temp");
                Directory.CreateDirectory(@"D:\extract\out" + Path.GetFileName(fileName));
                if (Directory.Exists(@"D:\extract\out\temp"))
                {
                    Directory.Move(@"D:\extract\out\temp", @"D:\extract\out" + Path.GetFileName(fileName));
                }
            }
        }
    }
}
но не работает ((

Добавлено через 2 минуты
все файлы из архивов распаковываются в папку temp и студия выдает ошибку, что такие - то файлы уже существуют в temp
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.08.2016, 16:33
Ответы с готовыми решениями:

Распаковка архивов
Пишу программу на c#. Она у меня распознает документы ворд и записывает их в таблицу. Теперь нужно...

Winrar + командная строка для разархивации всех архивов в папке в отдельные папки с указанием пароля
Подскажите пожалуйста, как написать batник для разархивации всех архивов в папке в отдельные папки...

Распаковка архивов
После изучения синтаксиса, решил написать программу в целях следующей стадии изучения языка....

Распаковка rar-архивов
Перепрбывал много чего и в том числе сторонние библиотеки, вот код, надо расспаковать два архива....

4
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,341
Записей в блоге: 1
06.08.2016, 16:34 2
Futtoto, как-то так:
C#
1
2
3
4
5
6
7
8
9
10
Process proc = Process.Start("WinRAR.exe", @"e D:\extract\in\123.rar D:\extract\out");
proc.WaitForExit(); // Ждем завершения
 
proc = Process.Start("WinRAR.exe", @"e D:\extract\out\1.rar D:\extract\out\1");
proc.WaitForExit();
 
proc = Process.Start("WinRAR.exe", @"e D:\extract\out\2.rar D:\extract\out\2");
proc.WaitForExit();
 
// и т.д.
0
12 / 1 / 3
Регистрация: 26.06.2016
Сообщений: 87
06.08.2016, 18:00  [ТС] 3
это будет работать если заранее знать имена архивов, которые вложены в 123.rar, а если таких "123.rar" будет штук 50 и в каждом из них еще по 10 архивов.... как тогда быть?

Добавлено через 4 минуты
надо как-то ухитриться запихать название вложенного архива (тот что в 123.rar находится) в параметр WiwRAR-а...
C#
1
2
string[] archs = Directory.GetFiles(@"D:\extract\out");
            foreach (var fileName in archs)
здесь fileName - название архива, который находится внутри 123.rar

Нужно чтобы в
C#
1
Process.Start("WinRAR.exe", @"e D:\extract\in\fileName D:\extract\out");
fileName распознавался как переменная, а не как часть пути...

Добавлено через 27 минут
у кого-нибудь есть еще какие-то идеи? я пока ничего больше придумать не могу((

Добавлено через 11 минут
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;
 
namespace Распаковать_RAR
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
       
        private void button1_Click(object sender, EventArgs e)
        {
            Process.Start("WinRAR.exe", @"e D:\extract\in\*.* D:\extract\out");
            // архивы 1.rar, 2.rar и 3.rar распаковались из 123.rar в папку D:\extract\out\
            string[] archs = Directory.GetFiles(@"D:\extract\out");
            
            for (int i = 0; i < archs.Length; i++)
            {
                string fileName = archs[i];
                string oneArch = @"D:\extract\out" + fileName;
                string outArch = @"D:\extract\out" + fileName + "";
                Process proc = Process.Start("WinRAR.exe", @"e oneArch outArch");
                proc.WaitForExit();
            }
        }
    }
}

на стадии
C#
1
Process proc = Process.Start("WinRAR.exe", @"e oneArch outArch");
студия пишет, что архивы не найдены...

Добавлено через 26 секунд
не знаю как еще можно извратиться ((

Добавлено через 20 минут
если вот так
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;
 
namespace Распаковать_RAR
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
       
        private void button1_Click(object sender, EventArgs e)
        {
            Process proc1 = Process.Start("WinRAR.exe", @"e D:\extract\in\*.* D:\extract\out");
            proc1.WaitForExit();
            // архивы 1.rar, 2.rar и 3.rar распаковались из 123.rar в папку D:\extract\out\
            string[] archs = Directory.GetFiles(@"D:\extract\out");
            
            for (int i = 0; i < archs.Length; i++)
            {
                Process proc = Process.Start("WinRAR.exe", @"e D:\extract\out\*.* D:\extract\out\temp");
                proc.WaitForExit();
                Directory.Move(@"D:\extract\out\temp", @"D:\extract\out" +"" + Path.GetFileNameWithoutExtension(archs[i]));
            }
        }
    }
}
то в каждую из папок (1, 2 и 3) распаковываются все файлы из всех архивов.... а мне нужно чтобы в каждую папку извлекались файлы только из одного архива
0
12 / 1 / 3
Регистрация: 26.06.2016
Сообщений: 87
06.08.2016, 18:00  [ТС] 4
Лучший ответ Сообщение было отмечено OwenGlendower как решение

Решение

Добавлено через 11 минут
ПОЛУЧИЛОСЬ!!!

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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;
 
namespace Распаковать_RAR
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
       
        private void button1_Click(object sender, EventArgs e)
        {
            Process proc1 = Process.Start("WinRAR.exe", @"e D:\extract\in\*.* D:\extract\out");
            proc1.WaitForExit();
            // архивы 1.rar, 2.rar и 3.rar распаковались из 123.rar в папку D:\extract\out\
            string[] archs = Directory.GetFiles(@"D:\extract\out");
            
            for (int i = 0; i < archs.Length; i++)
            {
                string archName = Path.GetFileName(archs[i]);
                Process proc = Process.Start("WinRAR.exe", "e" + @" D:\extract\out" + archName + @" D:\extract\out\temp");
                proc.WaitForExit();
                Directory.Move(@"D:\extract\out\temp", @"D:\extract\out" +"" + Path.GetFileNameWithoutExtension(archs[i]));
            }
        }
    }
}
0
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,341
Записей в блоге: 1
06.08.2016, 18:04 5
Цитата Сообщение от Futtoto Посмотреть сообщение
ПОЛУЧИЛОСЬ
Молодец!
0
06.08.2016, 18:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.08.2016, 18:04
Помогаю со студенческими работами здесь

Распаковка многотомных архивов
При Распаковки многотомных архивов, после запроса на 2 или 3 том выдает ошибку и закрывает окно,...

Распаковка файла из архивов
Есть задача: в папке имеется несколько архивов, в каждом архиве есть одна и та же папка в которой...

Распаковка gzip архивов
Всем привет :) Использую CMS магазин prestashop и в ней есть импорт языков. Язык содержится в...

Поочередная распаковка SFX-архивов
Здравствуйте, написал батник, который распаковывает шесть больших архивов sfx, созданных винраром....


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru