Autor
|
Tema: Listador de archivos VB.NET (Leído 9,848 veces)
|
eduardogi
Desconectado
Mensajes: 46
|
Estoy empezando en VB.NET y el otro día me surgió la idea de desarrollar una aplicacion para listar los archivos de una carpeta. Me puse a ello, pero me han surgido 2 problemas que serán una tontería, pero que no consigo solucionar.
*El primero: Primero selecciona la ruta de la carpeta y me lista todo los archivos en listbox. Ahora querría guardar esta lista en un archivo de texto. Este es el código que llevo pero me da error.
Dim rutaFichero As String rutaFichero = Form1.ruta_txt.Text With FolderBrowserDialog1 .Description = "Seleccionar la carpeta" If .ShowDialog = Windows.Forms.DialogResult.OK Then ruta_txt.Text = (.SelectedPath) MsgBox("Se va a crear un fichero de texto en la siguiente ruta " & Chr(10) & (.SelectedPath)) End If End With Try Dim oSW As New StreamWriter(FolderBrowserDialog1.SelectedPath) Dim a As Integer For a = 0 To ListBox1.Items.Count - a Dim Linea = ListBox1.Items(a).ToString() oSW.WriteLine(Linea) oSW.Flush() Next catch MsgBox("No se ha podido crear el fichero por falta de permisos" & Chr(10) & " Intente ejecutar la aplicacion con derechos de administrador", MsgBoxStyle.Critical)
End Try
*El segundo es que pongo otra opción para copiar toda la lista al porta-papeles. Creo que lo mas fácil es primero llevarlo a un textbox y luego copiar el contenido, pero no se si es la mejor opcion:
Form3.copia_txt.Text = "" For i = 0 To ListBox1.SelectedItems.Count - 1 Form3.copia_txt.Text = Form3.copia_txt.Text & Chr(10) & ListBox1.Items(i).ToString() Next Form3.Show()
Muchas gracias de antemano. Un saludo: eduardogi
|
|
|
En línea
|
|
|
|
Keyen Night
Desconectado
Mensajes: 496
Nothing
|
Usa el Tag (code=vb.net)(/code) con corchetes ([]) cuando vayas a escribir código. Cual es el error que te marca exactamente y en que línea del código? No me parece esto de: For a = 0 To ListBox1.Items.Count - a
Más bien debería ser así: For a = 0 To ListBox1.Items.Count - 1
Invocas al constructor de StreamWriter con el nombre de una carpeta Usa el Flush antes de cerrar el Stream, no trabajas con gran cantidad de datos como para vaciar los Buffer en cada escritura. Cierra el Stream después de que no lo necesites más.
|
|
« Última modificación: 5 Agosto 2011, 21:48 pm por Keyen Night »
|
En línea
|
La Fé Mueve Montañas... ...De Dinero
La programación es más que un trabajo es más que un hobby es una pasión...
|
|
|
eduardogi
Desconectado
Mensajes: 46
|
Lo primero gracias por tu respuesta.
El error es este: Excepción del tipo 'System.UnauthorizedAccessException' en mscorlib.dll En esta linea: Dim oSW As New StreamWriter(FolderBrowserDialog1.SelectedPath)
Y como tu dices se me ha colado la pata y es con el -1.
|
|
|
En línea
|
|
|
|
Keyen Night
Desconectado
Mensajes: 496
Nothing
|
Dim oSW As New StreamWriter(FolderBrowserDialog1.SelectedPath)
Te recuerdo que FolderBrowserDialog1.SelectedPath te retorna el DIRECTORIO seleccionado, por ejemplo: C:\EJEMPLONo es un archivo y por lo tanto no lo puedes abrir como uno con un StreamWriter, debes agregar "\" ( el separador de Path ) y el nombre del archivo a escribir: FolderBrowserDialog1.SelectedPath & "\Archivo.ejemplo"La forma correcta de hacer lo que intentas es abriendo el archivo de esta manera: Dim _Stream As New IO.FileStream("C:\Ejemplo\Archivo.ejemplo",IO.FileMode.Open) Dim _StreamWriter As New IO.StreamWriter(_Stream)
Has Flush y cierra el Stream después de usarlo.
|
|
« Última modificación: 5 Agosto 2011, 22:19 pm por Keyen Night »
|
En línea
|
La Fé Mueve Montañas... ...De Dinero
La programación es más que un trabajo es más que un hobby es una pasión...
|
|
|
eduardogi
Desconectado
Mensajes: 46
|
Gracias nuevamente por tu respuesta. jaja por fin consigo que me funcione. Ahora un problema que no consigo solucionar, es borrar el fichero antes de escribir en el. Os dejo en codigo: Dim rutaFichero As String rutaFichero = Form1.ruta_txt.Text With FolderBrowserDialog1 .Description = "Seleccionar la carpeta" If .ShowDialog = Windows.Forms.DialogResult.OK Then ruta_txt.Text = (.SelectedPath) End If MsgBox("Listado.txt va ser creado en la siguiente ruta" & Chr(10) & (.SelectedPath)) End With
If Not My.Computer.FileSystem.FileExists(FolderBrowserDialog1.SelectedPath & "\listado.txt") Then Dim Archivo As System.IO.FileStream Archivo = System.IO.File.Create(FolderBrowserDialog1.SelectedPath & "\listado.txt") Archivo.Close() End If
Dim a As Integer Dim Linea As String For a = 0 To ListBox1.Items.Count - 1 Dim _Stream As New IO.FileStream(FolderBrowserDialog1.SelectedPath & "\listado.txt", IO.FileMode.Open) Dim _StreamWriter As New IO.StreamWriter(_Stream)
Linea = Linea & vbNewLine & ListBox1.Items(a).ToString() _StreamWriter.Write("") _StreamWriter.WriteLine(Linea) _StreamWriter.Close() Next Dim _Stream2 As New IO.FileStream(FolderBrowserDialog1.SelectedPath & "\listado.txt", IO.FileMode.Open) Dim _StreamWriter2 As New IO.StreamWriter(_Stream2) _StreamWriter2.WriteLine("Programa desarollado por Eduardo Giralda" & vbNewLine & "Ruta: " & ruta_txt.Text & vbNewLine & "Numero de archivos: " & n_lbl.Text & vbNewLine & "" & vbNewLine & Linea) _StreamWriter2.Close() MsgBox("Archivo creado correctamente") Un saludo: eduardogi
|
|
|
En línea
|
|
|
|
Keyen Night
Desconectado
Mensajes: 496
Nothing
|
Cada vez me confundes más porque agregas esto? Linea = Linea & vbNewLine & ListBox1.Items(a).ToString()
Y no Linea = ListBox1.Items(a).ToString()
Te has complicado al extremo, para escribir un archivo con un StreamWriter no necesitas (a menos que no te hayas dado cuenta) lo que haces aquí: For a = 0 To ListBox1.Items.Count - 1 Dim _Stream As New IO.FileStream(FolderBrowserDialog1.SelectedPath & "\listado.txt", IO.FileMode.Open) Dim _StreamWriter As New IO.StreamWriter(_Stream) Linea = Linea & vbNewLine & ListBox1.Items(a).ToString() _StreamWriter.Write("") _StreamWriter.WriteLine(Linea) _StreamWriter.Close() Next
Creas el Stream, creas el StreamWriter, escribes y cierras una y otra vez las intrucciones están en un for se repiten tantas veces como ListBox Items tenga. Es como si escribieras en un cuaderno y para cada palabra cierras y abres el cuaderno, no tiene sentido Debes colocar el .Close fuera del for así como el invocar dentro de un for es de mala práctica no se debe hacer, y lo que haces con el segundo StreamWriter lo puede hacer con el primero antes de cerrarlo, no puedes abrir un mismo archivo con 2 StreamWriter diferentes a menos que le asignes la opción de compartir la escritura/lectura del archivo, y no puedes eliminar el archivo por que no has cerrado _Stream y no lo puedes cerrar porque lo invocastes en el espacio del for y fuera de el el Stream no existe a pesar de que el archivo sigue abierto, mira el código cierras son los Writer pero eso no cierra el archivo.
|
|
« Última modificación: 6 Agosto 2011, 02:14 am por Keyen Night »
|
En línea
|
La Fé Mueve Montañas... ...De Dinero
La programación es más que un trabajo es más que un hobby es una pasión...
|
|
|
eduardogi
Desconectado
Mensajes: 46
|
Es que he tenido un montón de problemas. Si sacaba del for el close me decía que no estaba declarado, y si lo ponía de otras formas me daba error porque decía que el archivo estaba abierto. Puede acarrear algún error o solo que es mas lento el programa??
Un saludo: eduardogi
|
|
|
En línea
|
|
|
|
Keyen Night
Desconectado
Mensajes: 496
Nothing
|
Con lo de invocar dentro del for llenas memoria de manera innecesaria, a pesar de que invoques una variable con el mismo nombre, es una nueva asignación y se guarda en memoria como nueva variable y la anterior queda flotando porque está creada pero no hay forma de hacer referencia a ella, si lo hicieras con variables que tardaran más en construirse el programa se tornaría muy lento. Con respecto a cerrar y abrir el Stream para cada vez que vas a escribir no es necesario explicar a menos que vayas a tomar un dictado cerrando y abriendo el cuaderno con cada palabra La forma correcta es esta: Dim _Stream As New FileStream("C:\Archivo.ejemplo", FileMode.Open) Dim _StreamWriter As New StreamWriter(_Stream) 'ESCRITURA DE EJEMPLO' For X As Integer = 0 To 10 _StreamWriter.WriteLine(X.ToString()) Next _Stream.Flush() _Stream.Close() 'YA AQUI SE PUEDE ELIMINAR EL ARCHIVO'
|
|
« Última modificación: 6 Agosto 2011, 03:20 am por Keyen Night »
|
En línea
|
La Fé Mueve Montañas... ...De Dinero
La programación es más que un trabajo es más que un hobby es una pasión...
|
|
|
eduardogi
Desconectado
Mensajes: 46
|
Gracias por tu respuesta. Creo que ya lo tengo. Dim rutaFichero As String rutaFichero = Form1.ruta_txt.Text With FolderBrowserDialog1 .Description = "Seleccionar la carpeta" If .ShowDialog = Windows.Forms.DialogResult.OK Then ruta_txt.Text = (.SelectedPath) End If MsgBox("Listado.txt va ser creado en la siguiente ruta" & Chr(10) & (.SelectedPath)) End With
If Not My.Computer.FileSystem.FileExists(FolderBrowserDialog1.SelectedPath & "\listado.txt") Then Dim Archivo As System.IO.FileStream Archivo = System.IO.File.Create(FolderBrowserDialog1.SelectedPath & "\listado.txt") Archivo.Close() End If
Dim a As Integer Dim Linea As String Dim _Stream As New IO.FileStream(FolderBrowserDialog1.SelectedPath & "\listado.txt", IO.FileMode.Open) Dim _StreamWriter As New IO.StreamWriter(_Stream) _StreamWriter.WriteLine("Programa desarollado por Eduardo Giralda" & vbNewLine & "Ruta: " & ruta_txt.Text & vbNewLine & "Numero de archivos: " & n_lbl.Text & vbNewLine & "") For a = 0 To ListBox1.Items.Count - 1 Linea = ListBox1.Items(a).ToString() _StreamWriter.WriteLine(Linea)
Next _StreamWriter.Close() MsgBox("Archivo creado correctamente") Un saludo: eduardogi
|
|
|
En línea
|
|
|
|
Keyen Night
Desconectado
Mensajes: 496
Nothing
|
Al final en _StreamWriter.Close() estas cerrando el escritor del stream no el stream principal, el archivo sigue abierto, cierra con _Stream.Close() hacer eso tambien cierra el Writer. Dónde dice If .ShowDialog = Windows.Forms.DialogResult.OK Then ruta_txt.Text = (.SelectedPath) End If
Si el usuario presiona cancelar y no aceptar sigue corriendo la ejecución de las demás instruciones, agrega un Else Exit Sub (asumo que estás en un Sub sino Exit Function y dónde sea que estes ). If .ShowDialog = Windows.Forms.DialogResult.OK Then ruta_txt.Text = (.SelectedPath) Else Exit Sub End If
Algunas recomendaciones estás en .Net, usa: ' Usa ' ' En Vez De ' My.Computer.FileSystem.FileExists ' Usa ' MessageBox.Show() ' En Vez De ' MsgBox ' Usa ' Environment.NewLine ' En Vez De ' VbNewLine
|
|
« Última modificación: 6 Agosto 2011, 22:31 pm por Keyen Night »
|
En línea
|
La Fé Mueve Montañas... ...De Dinero
La programación es más que un trabajo es más que un hobby es una pasión...
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
como puedo convertir archivos flash ha archivos de videos
Diseño Gráfico
|
asitaka_kintaro
|
3
|
6,133
|
22 Enero 2006, 23:53 pm
por Morris
|
|
|
Encontrar archivos de videos flahs en archivos temporales.
Multimedia
|
Akaronte
|
2
|
6,207
|
21 Octubre 2008, 22:09 pm
por Novlucker
|
|
|
Análisis archivos Extensiones cambiadas - Archivos camuflados - Contenido real
« 1 2 »
Software
|
Esgrimidor
|
11
|
9,048
|
24 Septiembre 2011, 01:53 am
por Esgrimidor
|
|
|
Cómo? Modificar archivos de la carpeta archivos de programas en windows 7
« 1 2 »
Windows
|
anonimo12121
|
10
|
22,707
|
10 Abril 2011, 01:02 am
por Songoku
|
|
|
Anadir un contador de descargas a un script php listador de archivos.
PHP
|
Veloz46
|
5
|
2,897
|
22 Noviembre 2013, 13:59 pm
por Veloz46
|
|