Título: ayuda con manejo de archivos en vb.net 2008 Publicado por: **Aincrad** en 20 Septiembre 2017, 20:11 pm hola a todos los del foro, :D .
hoy me he encontrado con 2 pequeñas trabas. yo quiero eliminar todos los archivos con formato {"*.vbs", "*.cmd", "*.js", "*.wsf", "*.ink", "*.bat"} de un disco cualquiera. pero solamente se eliminar uno por uno con este code Código
lo que quiero es borrar todos esos archivos con un solo codigo. como le hago? bien la segunda pregunta es como desocultar las carpetas de un diretorio en vb.net 2008. el code tiene que implementar la funcion de : Código
para el directorio. no se si me entienden. :silbar: creo que es mucho pedir, aunque son pequeñas funciones las que pido. XD Gracias de antemano. Título: Re: ayuda con manejo de archivos en vb.net 2008 Publicado por: ivancea96 en 20 Septiembre 2017, 20:24 pm Si te refieres a que solo borras 1 extension por vez, puedes hacer un for iterando cada extension (que tendrías en un array de String), y nada, llamar a la función GetFiles pasándole la variable de la extensión como parámetro.
Para el tema de archivos ocultos, puedes cambiarle los atributos. Aquí tienes la función y un ejemplo: https://msdn.microsoft.com/en-us/library/system.io.file.setattributes%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396 (https://msdn.microsoft.com/en-us/library/system.io.file.setattributes%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396) Título: Re: ayuda con manejo de archivos en vb.net 2008 Publicado por: **Aincrad** en 20 Septiembre 2017, 20:54 pm gracias por la respuesta, pero no me funciono.
no se si me explique bien, lo que quiero es : 1) que borre todos los archivos con formato {"*.vbs", "*.cmd", "*.js", "*.wsf", "*.ink", "*.bat"} en por ejemplo el disco extraible I y todos sus subdirectorios. 2) y lo otro de atributos sobre archivos ya lo había visto pero . lo que necesito es un code para desocultar todas las carpetas y subcarpetas de un disco extrible I. gracias por comentar. ;D Título: Re: ayuda con manejo de archivos en vb.net 2008 Publicado por: ivancea96 en 20 Septiembre 2017, 21:05 pm Bueno, en ese caso lo que buscas es acceder recursivamente a un árbol de carpetas. Actualmente, has listado 1 directorio. Te falta, por cada carpetanen ese directorio, listarla también, recursivamente.
¿Qué tal llevas el tema de funciones recursivas? También puede haber alguna función que te lo haga solo. Puedes ver algún comentario de este post: https://stackoverflow.com/questions/929276/how-to-recursively-list-all-the-files-in-a-directory-in-c (https://stackoverflow.com/questions/929276/how-to-recursively-list-all-the-files-in-a-directory-in-c) Título: Re: ayuda con manejo de archivos en vb.net 2008 Publicado por: **Aincrad** en 20 Septiembre 2017, 22:05 pm creo que me entendiste mal.
en pocas palabras lo que quiero en lo de desocultar carpetas es un code sencillo algo como esto. Código
PD: el primer problema ya lo solucione Título: Re: ayuda con manejo de archivos en vb.net 2008 Publicado por: ivancea96 en 20 Septiembre 2017, 22:14 pm Entendí bien, pero es que un "code sencillo" pues... Haz el código, y ya. Que sea sencillo qué importa.
Si es lo que buscas, aquí lo tienes ya hecho https://stackoverflow.com/questions/17273650/setting-file-attributes-recursively-subfolders (https://stackoverflow.com/questions/17273650/setting-file-attributes-recursively-subfolders) Título: Re: ayuda con manejo de archivos en vb.net 2008 Publicado por: Eleкtro en 21 Septiembre 2017, 02:41 am Hola.
Yo el primer problema no lo entiendo, basicamente por que aquí ya estás utilizando una iteración recursiva en busca de archivos con distintas extensiones:
Así que en teoría eso ya sabes como resolverlo, pero bueno, te hago saber que la función System.IO.Directory.GetFiles() tiene una sobrecarga para que le indiques si la búsqueda debe realizarse de forma recursiva o no:
Dicho método no provee ninguna sobrecarga para especificar más de una extensión o patrón de búsqueda, para eso ya estabas utilizando la otra función, My.Computer.FileSystem.GetFiles(). Si quieres sustituir la función My.Computer.FileSystem.GetFiles() por System.IO.Directory.GetFiles() y conservando la funcionalidad de buscar varias extensiones, pues sí o sí tienes que llamar a dicha función más de una vez para concatenar los resultados en una colección. Ejemplo: Código
Código Eso es incorrecto, ya que así no solo estás eliminando el atributo Hidden, sino también todos los demás atributos que hayan sido asignados al archivo. Tienes que conservar esos otros atributos. Ejemplo: Código
el code tiene que implementar la funcion de : Código
para el directorio. no se si me entienden. :silbar: No, no lo entiendo bien. Supongo que te refieres a que quieres visualizar las carpetas ocultas en el árbol de carpetas de la ventana de diálogo FolderBrowserDialog, pues bien, eso no puedes hacerlo. El componente FolderBrowserDialog respeta la configuración del usuario, así que si el usuario no tiene activada la opción para ver archivos y carpetas ocultas, el componente no las mostrará. De todas formas, una de las peores decisiones que un programador de .NET bajo tecnología WinForms puede tomar es utilizar el componente FolderBrowserDialog, ya que es límitadísimo y obsoleto, pues no le han modificado el diseño desde los 90. ¡Ni siquiera puedes introducir una ruta de directorio para navegar directamente!, no, tienes que clickar en los nodos hasta aburrirte. Es de lo peor, todo lo opuesto a productivo. (http://csharpcorner.mindcrackerinc.netdna-cdn.com/UploadFile/mahesh/folderbrowserdialog-in-C-Sharp/Images/FBDImg1.jpg) Por ese motivo te recomiendo encarecidamente que utilices los componentes gratuitos de Ooki, que son un wrapper de los diálogos modernos del "buscador" de carpetas:
(http://www.ookii.org/Content/software/images/folderbrowserdialog.png) PD: Insisto, ningún diálogo de carpetas te va a mostrar carpetas ocultas a menos que la opción de mostrar archivos y carpetas ocultas esté activada en el sistema. Puedes activarla tu mismo, aquí abajo te muestro como hacerlo, pero ten en cuenta que llevar a cabo este tipo de actos se considera intrusismo (un programa intrusivo): Código
Código
Saludos. Título: Re: ayuda con manejo de archivos en vb.net 2008 Publicado por: **Aincrad** en 21 Septiembre 2017, 17:47 pm hola, Elektro. lo que queria decir en
Citar el code tiene que implementar la funcion de : Código Código
para el directorio. no se si me entienden. :silbar: solamente queria decir , que utilizaria el FolderBrowserDialog para seleccionar el directorio donde se encontraban las carpetas ocultas. no queria visualizarlas eso como tu dijiste es imposible. un ejemplo de lo que queria era algo asi: Código
era con FolderBrowserDialog1 seleccionar un disco extraible o una carpeta, y después el code desoculta todo lo que esta dentro de la carpeta que seleccione. en fin logre hacerlo de la siguiente manera: Código
ejecuta la cmd oculto y con el argumento attrib . eso era lo que queria desocultar todas las carpetas y archivos de un directotio seleccionado. Título: Re: ayuda con manejo de archivos en vb.net 2008 Publicado por: Serapis en 21 Septiembre 2017, 20:09 pm Ya, pero con "-r -s -h -a", básicamente estás "desoclutando" (como tú dices), y al tiempo retirando los otros atributos (Sistema, solo lectura...).
Y respecto de obtener los ficheros de diferentes extensiones, es una pérdida de rendimeinto, buscar en una carpeta cada vez por una determinada extensión. Como mínimo, obtener una vez todos los ficheros de una carpeta... y luego a lo sumo iterar por cada extensión. entiéndase la diferencia... Una idea es: Getfiles(, ComoEste) que exige releer varias veces y obtener el listado y filtrarlo, (ambas cosas) por cada extensión, Con obtener: una sola vez el listado: GetallFiles(DeEstaCarpeta) y luego en esa lista buscar los de determinada extensión. Más óptimo a base de algo más de código, es todavía, obtener una lista de todos los ficheros de esa carpeta y luego en un bucle interno: Código: lista = getAllFiles(DeLaCarpetaX) Título: Re: ayuda con manejo de archivos en vb.net 2008 Publicado por: **Aincrad** en 21 Septiembre 2017, 20:39 pm Más óptimo a base de algo más de código, es todavía, obtener una lista de todos los ficheros de esa carpeta y luego en un bucle interno: Código: lista = getAllFiles(DeLaCarpetaX) Umm. no había pensado hacer eso. en verdad podría ser mas optimo , ya que con la solución que encontré tarda mucho. Título: Re: ayuda con manejo de archivos en vb.net 2008 Publicado por: Eleкtro en 22 Septiembre 2017, 13:39 pm Umm. no había pensado hacer eso. en verdad podría ser mas optimo , ya que con la solución que encontré tarda mucho. La metodología propuesta por el compañero NEBIRE de obtener una colección con todos los tipos de archivos e ir filtrando según la extensión, tiene sus ventajas pero también sus desventajas, resultando así en una solución óptima en muchos casos, y en otros no. Todo depende del escenario / circunstancias donde vayas a aplicar esa (o cualquier otra) solución. la solución que encontré tarda mucho. Si el rendimiento (en general, como la velocidad de ejecución) es un factor de importancia para ti, entonces deberías utilizar un tipo de evaluación vaga (o Lazy Evaluation por su nombre en Inglés) como sería la interfáz IEnumerable, y hacer uso de la programación asincrónica o del paralelismo. Voy a compartir contigo un pequeño extracto del código fuente de mi framework comercial ElektroKit (el cual se puede encontrar en mi firma de usuario del foro). Este código es una implementación personal (bueno, es un wrapper mejorado de la función Directory.GetFiles() ) de un buscador de archivos y directorios, aunque solo he dejado visible dos métodos en el código fuente para que puedas buscar archivos. Aparte de los grandes beneficios en velocidad que podrás comprobar por ti miso en los tests aquí abajo del todo de este comentario, este buscador también soporta la característica de buscar por múltiples patrones de nombre y por múltiples patrones de extensiones al mismo tiempo, así como la capacidad de poder excluir sin miedo algunos cualquier directorio en el que el usuario no disponga de permisos de lectura (con la posibilidad adicional de lanzar una excepción de acceso no autorizado si así se desea hacer), cosa que con las funciones built-in de .NET Framework no se puede controlar de forma natural. Simplemente copiar y pegar. Aquí tienes: Código
Puedes testear la velocidad de mi función y compararlo con las funciones Directory.GetFiles() y My.Computer.FileSystem.GetFiles() mediante el siguiente código: Código
Aquí tienes unos tests que he realizado: Código: Directorio: P:\ Código: Directorio: G:\ Código: Directorio: C:\Windows\System32 Como puedes comprobar, mi implementación es altamente velóz cuanto mayor es la cantidad de archivos a analizar, y es casi igual de eficiente a la función Directory.GetFiles() cuando se trata de una cantidad pequeña de archivos a analizar, con una diferencia ínfima de milisegundos... lo que hace que merezca mucho la pena usarlo si necesitamos buscar varias extensiones de archivo al mismo tiempo. Bueno, y de la función My.Computer.FileSystem.GetFiles mejor ni hablemos, los resultados hablan por si mismos. Los miembros expuestos en "My.Computer" al igual que en Microsoft.VisualBasic están muy poco optimizados y ningún programador de VB.NET al que le preocupe el rendimiento de su app debería usarlos. De hecho en el foro he repetido mil veces que los miembros del namespace Microsoft.VisualBasic solo existen por temas de compatibilidad y conformidad por gente que migre de VB6 a VB.NET y lo tengan más facil para orientarse, que ningún programador de VB.NET debería utilizar el namespace Microsoft.VisualBasic más que para mostrar un MsgBox y listo xD, se creerán que hablo por hablar o algo... pues bueno, pueden ver por ustedes mismos el nefasto código fuente en la referencia online del source de .NET Framework. PD: Estos tests se han realizado bajo circunstancias óptimas, realizando dos veces consecutivas cada llamada a cada uno de los tres métodos para que la caché de archivos enumerados del disco se actualizase y evitar así diferencias dispares en el tiempo de ejecución entre cada método. Un saludo. Título: Re: ayuda con manejo de archivos en vb.net 2008 Publicado por: **Aincrad** en 23 Septiembre 2017, 01:08 am :o :o :o :o . mierrrrrrrr. todo eso lo creaste tu :o , la verdad me has dejado
impresionado . creo que yo nunca podría hacer algo así. gracias de verdad por el code trabaja bien y es rápido. estoy en sorprendido. :o . Gracias Elektro me fue de gran ayuda. Título: Re: ayuda con manejo de archivos en vb.net 2008 Publicado por: Eleкtro en 23 Septiembre 2017, 13:08 pm :o :o :o :o . mierrrrrrrr. todo eso lo creaste tu :o , la verdad me has dejado impresionado . creo que yo nunca podría hacer algo así. Gracias, pero ese código no se merece mucha admiración, es viejito... le faltan varias revisiones de refactorización para tratar de optimizarlo más. Me alegro de que te haya servido. Saludos |