Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 16.09.2016
Сообщений: 82
1

Зная путь к папке с zip архивами распаковать все архивы в свои папки

16.09.2016, 15:53. Показов 1343. Ответов 15
Метки нет (Все метки)

есть папка, в которой лежат архивы. необходимо при нажатии на кнопку извлечь все архивы(каждый архив в свою папку)

как распаковать один архив, я знаю. сделал так:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
 'подключить библиотеку COM - Microsoft Shell Controls
        Dim sh As New Shell32.Shell()
        If Dir(TextBox2.Text & "") = vbNullString Then My.Computer.FileSystem.CreateDirectory(TextBox2.Text & "")
        If Dir(TextBox1.Text) = vbNullString Then
            MsgBox("Неверно указан файл zip.")
            Exit Sub
        End If
        Dim output As Shell32.Folder = sh.NameSpace(TextBox2.Text & "")
        Dim input As Shell32.Folder = sh.NameSpace(TextBox1.Text & "")
        output.CopyHere(input.Items, 4)
        MsgBox("Файл успешно распакован.")
а что бы распаковать все архивы, нужно, наверно сделать цикл? прошу помощи в написании данного кода.. и возможно ли переделать этот код? заранее благодарю за помощь!!!
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.09.2016, 15:53
Ответы с готовыми решениями:

Распаковать все архивы в папке в консольном приложении
Нарыл в интернете библиотеку для распаковки архивов - Ionic.Zip В папке лежат архивы - *.rar,...

Распаковать все архивы, находящиеся в определенной папке, одним разом
зная только путь к папке распаковывать все архивы, находящиеся в этой папке(zip)

Переделать код так, чтобы из указанной папки распаковывались все zip-архивы, каждый — в свою папку
есть код: ZipFile="C:\1\док_12345919.zip" ExtractTo="C:\1\док_12345919" Set fso =...

Записать в массив относительный путь с именем файла из папки(не зная полный путь папки)
Наверняка вопрос заезженный, но я не нашел(плохо искал) Нужно из вложенной папки, из директории,...

15
Лень — мое второе и
3035 / 2249 / 656
Регистрация: 28.11.2014
Сообщений: 3,438
Записей в блоге: 2
16.09.2016, 18:23 2
совершенно верно, через цикл
к примеру так
каждый архив будет извлекаться в ту же папку, где он находится в каталог с именем архива
VB.NET
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
Public Class Form1
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim name As String = ""
        Dim startpath As String = ""
        For i = 0 To ListBox1.Items.Count - 1 ' перебираем все элементы listbox
            startpath = FileIO.FileSystem.GetFileInfo(ListBox1.Items.Item(i)).DirectoryName 'находим каталог откуда родом этот zip
            name = IO.Path.GetFileNameWithoutExtension(ListBox1.Items.Item(i)) 'находим имя zip архива
            Path_unZip = startpath & "" & name ' собираем путь для нового каталога для разархивации
            If IO.Directory.Exists(Path_unZip) = False Then 'если его нет, то создаем
                IO.Directory.CreateDirectory(Path_unZip)
            End If
            File_Zip = ListBox1.Items.Item(i) 'указываем, где лежит архив для разархивации
            UnZip() ' вызываем процедуру
        Next
        MsgBox("Все архивы успешно распакованы")
    End Sub
    Dim File_Zip As String = ""
    Dim Path_unZip As String = ""
    Sub UnZip() ' процедура для разархивации
        Dim sh As New Shell32.Shell()
        Dim output As Shell32.Folder = sh.NameSpace(Path_unZip) 'Директория в которую хотим распаковать
        Dim input As Shell32.Folder = sh.NameSpace(File_Zip) 'Адрес к архиву из которого всё будет извлечено
        output.CopyHere(input.Items, 16)
    End Sub
    Dim k As Integer = 0
    Dim path As String = ""
    Sub search() ' процедура поиска файлов
        On Error Resume Next
        ListBox1.Items.Clear()
        k = 0
        For Each foundFile As String In My.Computer.FileSystem.GetFiles(path, FileIO.SearchOption.SearchAllSubDirectories, "*.zip")
 
            ListBox1.Items.Add(foundFile)
 
            k = k + 1
            Label1.Text = k
        Next
        If ListBox1.Items.Count > 0 Then
            ListBox1.SelectedIndex = 0
        End If
    End Sub
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Dim SFD As New FolderBrowserDialog ' выбираем каталог
        If SFD.ShowDialog = Windows.Forms.DialogResult.OK Then
            TextBox1.Text = SFD.SelectedPath
            path = SFD.SelectedPath
            search()
        Else
            Exit Sub
        End If
    End Sub
End Class
Зная путь к папке с zip архивами распаковать все архивы в свои папки
5
1249 / 957 / 134
Регистрация: 01.10.2009
Сообщений: 2,970
Записей в блоге: 1
16.09.2016, 20:08 3
Цитата Сообщение от Orlangur1991 Посмотреть сообщение
Dim SFD As New FolderBrowserDialog
А почему не FBD ?
1
Лень — мое второе и
3035 / 2249 / 656
Регистрация: 28.11.2014
Сообщений: 3,438
Записей в блоге: 2
16.09.2016, 20:21 4
XIST, не суть, было лень переименовывать
0
0 / 0 / 0
Регистрация: 16.09.2016
Сообщений: 82
18.09.2016, 17:05  [ТС] 5
Orlangur1991, все работает!!спасибо!! только у меня архивы почему то распаковываются не в выбранный каталог, а на уровень выше. то есть:
в каталоге D:\test у меня два архива test1.zip и test2.zip, он должен распаковывать их в папку test, а он распаковывает их на уровень выше, т.е. на D:\
0
Модератор
Эксперт .NET
3363 / 3023 / 463
Регистрация: 27.01.2014
Сообщений: 5,617
18.09.2016, 17:11 6
в 7й строке определение папки где лежит этот файл получает корень диска видимо... вы прпробуйте погоубже запрятать файл архива - что он выдаст? снова D:\ ?
0
0 / 0 / 0
Регистрация: 16.09.2016
Сообщений: 82
18.09.2016, 18:12  [ТС] 7
Yury Komar, запрятал на 2 каталога глубже,все равно на уровень выше поднимает.. не понимаю почему только..

Добавлено через 10 минут
Yury Komar, и имя папки еще задает, не просто имя архива test, а testtest1

Добавлено через 40 минут
Orlangur1991, всё, разобрался!!всем спасибо!!! форум сожрал "" в 9 строчке!!огонь всё работает!!!
еще раз всем громадное спасибо!!!
0
Модератор
Эксперт .NET
3363 / 3023 / 463
Регистрация: 27.01.2014
Сообщений: 5,617
18.09.2016, 18:41 8
тфу ты... я думал вы это подправили в своем проекте... а оказалось неглядя?
0
0 / 0 / 0
Регистрация: 16.09.2016
Сообщений: 82
25.09.2016, 12:53  [ТС] 9
Orlangur1991, пытаюсь теперь сделать на вашем примере ту же самую распаковку массово архивов, только с использованием библиотеки DotNetZip(Ionic.Zip), что то у меня не получается. помогите разобраться в чем проблема?

VB.NET
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
Imports Ionic.Zip
 
Public Class Form1
 
   
    Public Sub MyExtract(ByVal ZipToUnpack As String, ByVal UnpackDirectory As String)
        Using zip As ZipFile = ZipFile.Read(ZipToUnpack)
            Dim e As ZipEntry
            For Each e In zip
                e.Extract(UnpackDirectory, ExtractExistingFileAction.OverwriteSilently)
            Next
        End Using
    End Sub
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim name As String = ""
        Dim startpath As String = ""
        For i = 0 To ListBox1.Items.Count - 1 ' перебираем все элементы listbox
            startpath = FileIO.FileSystem.GetFileInfo(ListBox1.Items.Item(i)).DirectoryName 'находим каталог откуда родом этот zip
            name = IO.Path.GetFileNameWithoutExtension(ListBox1.Items.Item(i)) 'находим имя zip архива
            Path_unZip = startpath & "" & name ' собираем путь для нового каталога для разархивации
            If IO.Directory.Exists(Path_unZip) = False Then 'если его нет, то создаем
                IO.Directory.CreateDirectory(Path_unZip)
            End If
            File_Zip = ListBox1.Items.Item(i) 'указываем, где лежит архив для разархивации
            ' UnZip() ' вызываем процедуру
 
            Dim zip2 = Path_unZip    'путь к архиву
            Dim unzip2 = File_Zip ' путь к папке
            MyExtract(zip2, unzip2)
        Next
        MsgBox("Все архивы успешно распакованы")
    End Sub
    Dim File_Zip As String = ""
    Dim Path_unZip As String = ""
 
   
    Dim k As Integer = 0
    Dim path As String = ""
    Sub search() ' процедура поиска файлов
        On Error Resume Next
        ListBox1.Items.Clear()
        k = 0
        For Each foundFile As String In My.Computer.FileSystem.GetFiles(path, FileIO.SearchOption.SearchAllSubDirectories, "*.zip")
 
            ListBox1.Items.Add(foundFile)
 
            k = k + 1
            Label1.Text = k
        Next
        If ListBox1.Items.Count > 0 Then
            ListBox1.SelectedIndex = 0
        End If
    End Sub
 
 
 
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Dim SFD As New FolderBrowserDialog ' выбираем каталог
        If SFD.ShowDialog = Windows.Forms.DialogResult.OK Then
            TextBox2.Text = SFD.SelectedPath
            path = SFD.SelectedPath
            search()
        Else
            Exit Sub
        End If
    End Sub
0
Лень — мое второе и
3035 / 2249 / 656
Регистрация: 28.11.2014
Сообщений: 3,438
Записей в блоге: 2
25.09.2016, 16:29 10
off_13, перепутал местами архив и каталог при вызове процедуры и не понятно зачем завел лишние переменные, просто для вызова используй
VB.NET
1
  MyExtract(File_Zip, Path_unZip)
1
0 / 0 / 0
Регистрация: 16.09.2016
Сообщений: 82
25.09.2016, 18:51  [ТС] 11
Orlangur1991, аааа...ясно...спасибо большое за помощь!) все работает!!!
0
1 / 1 / 0
Регистрация: 21.11.2018
Сообщений: 82
05.04.2019, 18:11 12
Orlangur1991, Подскажите а можно в процедуру распаковки, добавить извлечение zip архива с известным паролем?
0
Лень — мое второе и
3035 / 2249 / 656
Регистрация: 28.11.2014
Сообщений: 3,438
Записей в блоге: 2
08.04.2019, 10:50 13
westcoast89, можно, достаточно указать password.
В процедуру передается нужный пароль
VB.NET
1
2
3
4
5
6
7
8
9
Public Sub MyExtract(ByVal ZipToUnpack As String, ByVal UnpackDirectory As String, ByVal pass As String)
        Using zip As ZipFile = ZipFile.Read(ZipToUnpack)
            zip.Password = pass
            Dim e As ZipEntry
            For Each e In zip
                e.Extract(UnpackDirectory, ExtractExistingFileAction.OverwriteSilently)
            Next
        End Using
    End Sub
2
1 / 1 / 0
Регистрация: 21.11.2018
Сообщений: 82
09.04.2019, 06:36 14
Orlangur1991, А если приминительно к вашему коду выше?
VB.NET
1
2
3
4
5
Sub UnZip() ' процедура для разархивации
        Dim sh As New Shell32.Shell()
        Dim output As Shell32.Folder = sh.NameSpace(Path_unZip) 'Директория в которую хотим распаковать
        Dim input As Shell32.Folder = sh.NameSpace(File_Zip) 'Адрес к архиву из которого всё будет извлечено
        output.CopyHere(input.Items, 16)
Я думал что в последнюю строчку можно добавить пароль, разве нет?)
0
Лень — мое второе и
3035 / 2249 / 656
Регистрация: 28.11.2014
Сообщений: 3,438
Записей в блоге: 2
09.04.2019, 09:09 15
westcoast89, нет, так не работает)
1
1 / 1 / 0
Регистрация: 21.11.2018
Сообщений: 82
09.04.2019, 10:12 16
Orlangur1991, Благодарю в очередной раз, помогли)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2019, 10:12

Распаковать архивы в папки с именами архивов, переименовать некоторые файлы по маске и обратно запаковать
Нужна помощь!!! Есть папка, в которой куча архивов *.zip Нужно распаковать архивы в папки с...

Распаковать папки разной вложенности в Zip архиве
Здравствуйте, форумчане! Помогите пожалуйста с проблемой. Есть FTP сервер куда копируются zip...

Проверять папку на новые файлы архивы zip и переименовывать их при появлении новых в папке
Есть папка(скажем D:\arhiv)Она изначально пуста. При нажатии на кнопку "Запуск" программа начинает...

Распаковать все архивы, находящиеся в одной дериктории
Необходимо распаковать все архивы, находящиеся в одном каталоге, имя папок распакованных архивов...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.