Foros del Web » Programación para mayores de 30 ;) » .NET »

[SOLUCIONADO] Asignar nombre a archivo comprimido.

Estas en el tema de Asignar nombre a archivo comprimido. en el foro de .NET en Foros del Web. Buen dìa! Vengo con la siguiente duda, al momento de comprimir un archivo en una aplicacion de vb.net 2005 si es un .txt me guarda ...
  #1 (permalink)  
Antiguo 05/06/2013, 07:59
 
Fecha de Ingreso: enero-2013
Mensajes: 93
Antigüedad: 11 años, 3 meses
Puntos: 0
Pregunta Asignar nombre a archivo comprimido.

Buen dìa!
Vengo con la siguiente duda, al momento de comprimir un archivo en una aplicacion de vb.net 2005 si es un .txt me guarda el archivo con el nombre del archivo que comprimi, mas la extension, por ejemplo.
Comprimo un archivo de Word llamado Tarea 1, me lo guarda como Tarea 1.doc (el nombre del archivo comprimido) en lugar de solamente Tarea 1, si funciona bien el programa ya que si comprime y se encuentra el archivo dentro, solamente quiero que aparesca con el nombre del archivo, sin la extension, no es el windows ya lo verifique, pongo el codigo:

Código vb:
Ver original
  1. Imports Ionic.Zip
  2. Imports System.IO
  3. Imports Ionic.BZip2
  4.  Private Sub Comprimir()
  5.         Using zip As ZipFile = New ZipFile()
  6.             zip.AddFile(Me.TextBox1.Text, "")
  7.             Me.TextBox2.Text = Me.TextBox1.Text
  8.             zip.Save(TextBox2.Text & ".zip")
  9.         End Using
  10.     End Sub
  11.  
  12. Private Sub OpenFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk
  13.  
  14.         Dim strm As System.IO.Stream
  15.         strm = OpenFileDialog1.OpenFile()
  16.         TextBox1.Text = OpenFileDialog1.FileName.ToString()
  17.  
  18.         If Not (strm Is Nothing) Then
  19.             'insert code to read the file data
  20.            strm.Close()
  21.             MessageBox.Show("Archivo Seleccionado")
  22.         End If
  23.     End Sub
  24.  
  25. Private Sub btComprimir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btComprimir.Click
  26.         Try
  27.             If TextBox1.Text = "" Then
  28.                 MessageBox.Show("Verifique la informacion completa")
  29.             Else
  30.  
  31.                 Comprimir()
  32.                
  33.             End If
  34.             TextBox1.Clear()
  35.          
  36.  
  37.         Catch
  38.             Comprimir()
  39.         Finally
  40.         End Try
  41.     End Sub
  42.  
  43. Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs)
  44.         OpenFileDialog1.Title = "Seleccione un archivo"
  45.         OpenFileDialog1.InitialDirectory = "C:temp"
  46.  
  47.         OpenFileDialog1.ShowDialog()
  48.  
  49.     End Sub

Saludos!
  #2 (permalink)  
Antiguo 05/06/2013, 15:50
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Asignar nombre a archivo comprimido.

En realidad te lo está guardando como Tarea1.doc.zip, lo que pasa es que tendrás activado el modo en el que no se muestran las extensiones de archivo.

Para que haga lo que quieres tienes que quitarlo manualmente la extensión al archivo que comprimes. Puedes usar la clase Path para ello.

Código vb:
Ver original
  1. fileName = Path.GetFileNameWithoutExtension(fileName)

Un saludo.
  #3 (permalink)  
Antiguo 06/06/2013, 07:37
 
Fecha de Ingreso: enero-2013
Mensajes: 93
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Asignar nombre a archivo comprimido.

Gracias ya encontre el detalle!!

Oye disculpa se podria hacer lo mismo para seleccionar una carpeta y que en automatico comprima todos los archivos que estan dentro de ella pero por separado...

Gracias y saludos!
  #4 (permalink)  
Antiguo 06/06/2013, 14:54
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Asignar nombre a archivo comprimido.

Tienes dos formas de hacerlo.
  1. Recorrer recursivamente los directorios.
  2. Usando la opción SearchOption.AllDirectories del método EnumerateFiles de la clase Directory

Ejemplo de lo segundo:

Código VB:
Ver original
  1. 'De esta manera obtienes todos los ficheros del directorio y subdirectorios
  2. Dim txtFiles = Directory.EnumerateFiles(sourceDirectory, "*", SearchOption.AllDirectories)
  3.  
  4.             For Each currentFile As String In txtFiles
  5.                'Aquí haces lo que quieras con cada fichero              
  6.            Next

Échale un vistazo: http://msdn.microsoft.com/es-es/library/dd383571.aspx
  #5 (permalink)  
Antiguo 07/06/2013, 07:57
 
Fecha de Ingreso: enero-2013
Mensajes: 93
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Asignar nombre a archivo comprimido.

de acuerdo, ya pude seleccionar una carpeta con el siguiente codigo:
Código vb:
Ver original
  1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.         Try
  3.  
  4.             With FolderBrowserDialog1
  5.                 .Reset()
  6.                 .Description = " Seleccionar una carpeta "
  7.                 .SelectedPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
  8.                 .ShowNewFolderButton = False
  9.                 Dim ret As DialogResult = .ShowDialog
  10.                 If ret = Windows.Forms.DialogResult.OK Then
  11.                     Dim nFiles As ObjectModel.ReadOnlyCollection(Of String)
  12.                     nFiles = My.Computer.FileSystem.GetFiles(.SelectedPath)
  13.                     TextBox1.Text = FolderBrowserDialog1.SelectedPath.ToString()
  14.                     MsgBox("Total de archivos: " & CStr(nFiles.Count), _
  15.                                             MsgBoxStyle.Information)
  16.                 End If
  17.                 .Dispose()
  18.             End With
  19.         Catch oe As Exception
  20.             MsgBox(oe.Message, MsgBoxStyle.Critical)
  21.         End Try
  22.     End Sub

Pero al momento de comprimir asi:

Código vb:
Ver original
  1. Public Sub Comprimir()
  2.         Try
  3.             Using zip As New ZipFile()
  4.                 zip.AddDirectory(Me.TextBox1.Text)
  5.  
  6.                 zip.Save(System.IO.Path.Combine(System.IO.Path.GetDirectoryName(Me.TextBox1.Text), System.IO.Path.GetFileNameWithoutExtension(Me.TextBox1.Text) + ".zip"))
  7.             End Using
  8.         Catch ex As Exception
  9.             MsgBox(ex.Message)
  10.  
  11.         End Try
  12.  
  13.     End Sub

Me comprime toda la carpeta y dentro vienen los archivos.

Lo que quiero es que por ejemplo, yo seleccione una carpeta, me comprima todos los archivos que vienen dentro de ella PERO cada archivo que viene dentro lo comprima por separado, que aparescan por decir, si vienen 5 documentos, que aparezcan 5 archivos .zip por separada, cada uno con un documento...
Saludos buen dia!

Última edición por davidalonsso05; 07/06/2013 a las 10:15
  #6 (permalink)  
Antiguo 07/06/2013, 10:22
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Asignar nombre a archivo comprimido.

¿Puedes mostrar como llamas al método Comprimir?

Por lo que parece quieres comprimir un directorio entero, pero quiero saber como estás haciendo la llamada porque sin esa información es un poco complicado saber que pasa.

Un saludo.
  #7 (permalink)  
Antiguo 07/06/2013, 10:24
 
Fecha de Ingreso: enero-2013
Mensajes: 93
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Asignar nombre a archivo comprimido.

Código vb:
Ver original
  1. Private Sub btnComprimir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  2.         Try
  3.             If TextBox1.Text = "" Then
  4.                 MessageBox.Show("Verifique la informacion completa")
  5.             Else
  6.                 Comprimir()
  7.                 ProgressBar1.Value = ProgressBar1.Maximum
  8.                 MessageBox.Show("Archivo Comprimido")
  9.                 ProgressBar1.Value = ProgressBar1.Minimum
  10.             End If
  11.             TextBox1.Clear()
  12.         Catch
  13.         End Try
  14.  
  15.  
  16.     End Sub

Al dar click sobre el archivo comprimir... es a lo que se refiere?
  #8 (permalink)  
Antiguo 07/06/2013, 10:40
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Asignar nombre a archivo comprimido.

Ha habido un pequeño error, porque has editado la pregunta y yo estaba leyendo lo que habías escrito antes.

Rebobinemos.

Como te dije en la respuesta de ayer, tienes que enumerar los ficheros e ir comprimiendolos uno a uno.

Código vb:
Ver original
  1. Dim txtFiles = Directory.EnumerateFiles(sourceDirectory, "*", SearchOption.AllDirectories)
  2.  
  3.             For Each currentFile As String In txtFiles
  4.                Comprimir(Path.GetFileNameWithoutExtension(currentFile))
  5.             Next
  6.  
  7.  
  8.  Private Sub Comprimir(Dim file as String)
  9.         Using zip As ZipFile = New ZipFile()
  10.             zip.AddFile(file, "")
  11.             zip.Save(file & ".zip")
  12.         End Using
  13.     End Sub

No me has dicho donde quieres guardar los archivos comprimidos, si en el mismo lugar que el archivo original o en otra ruta. Para cambiar eso, sólo tendrías que jugar con la ruta de guardado.

Un saludo.
  #9 (permalink)  
Antiguo 07/06/2013, 10:45
 
Fecha de Ingreso: enero-2013
Mensajes: 93
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Asignar nombre a archivo comprimido.

Si, guardar en el archivo original en la misma ruta, lo que sucede es que la ruta aparece en el textbox ya que es manul, el pedazo de codigo que me proporcionas:

Código vb:
Ver original
  1. Dim txtFiles = Directory.EnumerateFiles(sourceDirectory, "*", SearchOption.AllDirectories)
  2.  
  3.             For Each currentFile As String In txtFiles
  4.                Comprimir(Path.GetFileNameWithoutExtension(currentFile))
  5.             Next

tendria que añadir otra libreria? disculpa lo que sucede es que la primera vez que hago esto y no comprendo aun muy bien hehe

Y asi mismo me marca error en la linea Directory.EnumerateFiles ya que no me aparece la linea EnumarateFiles y en currentFile tambien...

Última edición por davidalonsso05; 10/06/2013 a las 09:59

Etiquetas: net, nombre, textbox, vb
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:43.