none
Comprimir archivos al seleccionar una carpeta por SEPARADO vb.net. RRS feed

  • Pregunta

  • Buen día, anteriormente habia solucionado el problema de comprimir un archivo pero ahora me surgio otra duda, bueno me encomendaron otra tarea...

    Lo que quiero es que al seleccionar una carpeta en mi PC y si esta carpeta tiene por ejemplo 7 archivos ya sea .txt .doc, una imagen o lo que este dentro, lo comprima pero diferentes archivos .zip, un archivo .zip por cada fichero o archivo que habia dentro de la carpeta, ya que con el siguiente codigo logro comprimir la carpeta y dentro de ese archivo .zip vienen todos los documentos que estaban en la carpeta...

    Imports System.Collections
    Imports System.Text
    Imports System.IO
    Imports Ionic.Zip
    Imports Ionic.BZip2
    
    Public Class Form1
        Public Sub Comprimir()
            Try
                Using zip As New ZipFile()
                    zip.AddDirectory(Me.TextBox1.Text, "")
                zip.Save(System.IO.Path.Combine(System.IO.Path.GetDirectoryName(Me.TextBox1.Text), System.IO.Path.GetFileNameWithoutExtension(Me.TextBox1.Text) + ".zip"))
                End Using
            Catch ex As Exception
                MsgBox(ex.Message)
    
            End Try
    
        End Sub
    
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Try
    
                With FolderBrowserDialog1
                    .Reset()
                    .Description = " Seleccionar una carpeta "
                    .SelectedPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
                    .ShowNewFolderButton = False
                    Dim ret As DialogResult = .ShowDialog
                    If ret = Windows.Forms.DialogResult.OK Then
                        Dim nFiles As ObjectModel.ReadOnlyCollection(Of String)
                        nFiles = My.Computer.FileSystem.GetFiles(.SelectedPath)
                        TextBox1.Text = FolderBrowserDialog1.SelectedPath.ToString()
                        MsgBox("Total de archivos: " & CStr(nFiles.Count), _
                                                MsgBoxStyle.Information)
                    End If
                    .Dispose()
                End With
            Catch oe As Exception
                MsgBox(oe.Message, MsgBoxStyle.Critical)
            End Try
        End Sub
    
     Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Try
                If TextBox1.Text = "" Then
                    MessageBox.Show("Verifique la informacion completa")
                Else
                    Comprimir()
                   MessageBox.Show("Archivo Comprimido")
                    
                End If
                TextBox1.Clear()
            Catch
            End Try
    
    
        End Sub
    End Class

    Lo que hago es que el usuario seleccione la carpeta, posteriormente la paso al textbox1, luego el textbox1 lo tomo como archivo a comprimir...

    Gracias y saludos!

    lunes, 10 de junio de 2013 13:46

Respuestas

  • Por si a alguien se le presenta el mismo problema o algo parecido les dejo la solucion que obtuve buscando codigos y modificandolos:

    Imports System.IO
    Imports System.IO.Directory
    Imports System.IO.DirectoryInfo
    Imports ionic.Zip
    Imports Ionic.BZip2
    Imports System.IO.Compression

    Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Try With FolderBrowserDialog1 .Reset() .Description = " Seleccionar una carpeta " .SelectedPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) .ShowNewFolderButton = False Dim ret As DialogResult = .ShowDialog If ret = Windows.Forms.DialogResult.OK Then Dim nFiles As ObjectModel.ReadOnlyCollection(Of String) nFiles = My.Computer.FileSystem.GetFiles(.SelectedPath) TextBox1.Text = FolderBrowserDialog1.SelectedPath.ToString() MsgBox("Total de archivos: " & CStr(nFiles.Count), _ MsgBoxStyle.Information) End If .Dispose() End With Catch oe As Exception MsgBox(oe.Message, MsgBoxStyle.Critical) End Try End Sub Public Sub Cargar() Try For Each Archivo As String In My.Computer.FileSystem.GetFiles( _ Me.TextBox1.Text, _ FileIO.SearchOption.SearchAllSubDirectories) 'ListBox1.Items.Add(Archivo) Using zip As ZipFile = New ZipFile() zip.AddFile(Archivo, "") zip.Save(System.IO.Path.Combine(Me.TextBox1.Text, System.IO.Path.GetFileNameWithoutExtension(Archivo) + ".zip")) End Using Next ' errores Catch oe As Exception MsgBox(oe.Message, MsgBoxStyle.Critical) End Try End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click If TextBox1.Text = "" Then MessageBox.Show("Seleccione una carpeta a comprimir") Else Cargar() MessageBox.Show("Archivos comprimidos") TextBox1.Clear() End If End Sub End Class


    Lo modifique pero pude hacerlo :)

    • Marcado como respuesta DavidAlonsso miércoles, 12 de junio de 2013 16:20
    miércoles, 12 de junio de 2013 16:20