none
Borrado de carpetas con condición RRS feed

  • Pregunta

  • Buenos días;

    Este es el primer mensaje que escribo en el foro, aunque sea usuario habitual (de forma pasiva, más de recolectar). Tengo una cuestión  que me quita el sueño y espero que alguien de vosotros pueda ayudarme, espero expresarme con claridad.

    Os pongo en situación: Dispongo de un archivo excel .xlsm que absorbe datos de otro archivo excel, en este caso, un .xls. Al iniciar sesión se crea una carpeta temporal (por cada usuario) dentro de una carpeta general llamada Download (el nombre es lo de menos), con estos dos archivos y, cuando se guarda y cierra la sesión, el archivo .xls se guarda en la nube, quedando el archivo excel con macros en la carpeta temporal de cada usuario. 

    Un ejemplo puede ser que dentro de la carpeta Download existan 3 carpetas:

    - Jose

    - Carla

    - Julia

    Aquí podemos ver una carpeta general que dispone de tres carpetas temporales de los diferentes usuarios (Jose, Carla y Julia) y dentro de estas carpetas podemos encontrar o dos archivos si dicho usuario esta conectado al programa o solamente un archivo (excel de macros) ya que el usuario ha guardado en la nube uno de los archivos.

    ¿Qué necesito?

    Necesito realizar un programa para entrar en dicha carpeta Download y entrar en cada carpeta para ver si existe o no el archivo de datos, si no existe, se borraría la carpeta contenedora de dicho usuario porque quiere decir que ya ha guardado en la nube sus datos.

    Ejemplo: Julia en su carpeta temporal solo dispone un archivo con macros, y no un segundo archivo de datos, esto quiere decir que ya ha cerrado la sesión.

    Debido a que la entrada al programa excel se realiza mediante una lanzadera creada en .NET, quiero introducir el código de borrado de carpetas que existan en la carpeta download.

    ¿Alguien podría ayudarme a conseguir este objetivo que tengo? 

    Gracias de antemano a todos!!

    Un saludo

    lunes, 13 de noviembre de 2017 12:38

Respuestas

  • Si buscas automatizar la actualización de la estructura de carpetas, puedes crear un proyecto de tipo Windows Services y utilizar la clase FileSystemWatcher para reconocer el momento en que un archivo es eliminado y la cuenta de archivos de la carpeta queda en uno, y en consecuencia eliminar la carpeta del sistema de archivos. Puedes tener algunas pautas al respecto en el siguiente enlace: How to implement a simple filewatcher Windows service.

    Si por el contrario buscas ejecutar la actualización de la estructura de carpetas por demanda ("...Debido a que la entrada al programa excel se realiza mediante una lanzadera creada en .NET, quiero introducir el código de borrado de carpetas que existan en la carpeta download") puedes recuperar los directorios que contengan un sólo archivo y proceder a quitarlos del sistema de archivos, por ejemplo.

    For Each Dir As String In Directory.GetDirectories("D:\Download", "*.*", SearchOption.AllDirectories).
    	Where(Function(f) Directory.EnumerateFiles(f).Count = 1)
    	Directory.Delete(Dir, True)
    Next

    lunes, 13 de noviembre de 2017 18:21

Todas las respuestas

  • Si buscas automatizar la actualización de la estructura de carpetas, puedes crear un proyecto de tipo Windows Services y utilizar la clase FileSystemWatcher para reconocer el momento en que un archivo es eliminado y la cuenta de archivos de la carpeta queda en uno, y en consecuencia eliminar la carpeta del sistema de archivos. Puedes tener algunas pautas al respecto en el siguiente enlace: How to implement a simple filewatcher Windows service.

    Si por el contrario buscas ejecutar la actualización de la estructura de carpetas por demanda ("...Debido a que la entrada al programa excel se realiza mediante una lanzadera creada en .NET, quiero introducir el código de borrado de carpetas que existan en la carpeta download") puedes recuperar los directorios que contengan un sólo archivo y proceder a quitarlos del sistema de archivos, por ejemplo.

    For Each Dir As String In Directory.GetDirectories("D:\Download", "*.*", SearchOption.AllDirectories).
    	Where(Function(f) Directory.EnumerateFiles(f).Count = 1)
    	Directory.Delete(Dir, True)
    Next

    lunes, 13 de noviembre de 2017 18:21
  • Muchas gracias!! 

    Finalmente he hecho un miniprograma que se ejecuta al cerrar el excel, como modo despedida y un ¡Hasta pronto!

    Para ello me he basado en tu código y lo he modificado un poco.

        Private Sub BorradoCarpeta()
            For Each Dir As String In Directory.GetDirectories("C:\AplicanetFinanzas\bin\Debug\Download", "*.*", SearchOption.AllDirectories)
                If (Directory.EnumerateFiles(Dir).Count = 1) Then
                    Directory.Delete(Dir, True)
                End If
            Next
            Me.Close()
        End Sub

    Asi que darte las gracias por facilitarme el camino!!

    Un saludo

    miércoles, 15 de noviembre de 2017 8:08