none
Problema eliminando Ficheros en vb .net RRS feed

  • Pregunta

  • Tengo un problema con el borrado de ficheros de una carpeta. He hecho un programa que copia fotos de una carpeta a otra, para lo cual genera una serie de thumbnails, que luego se muestran en un flowlayout panel, cada uno junto a su checkbox correspondiente para poder seleccionarlos.

    Va todo genial. Sólo que una vez seleccionadas las imágenes, tengo el siguiente código:

      Private Sub VentanaThumbnails_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
       Dim i As Integer = 0
       Dim s() As String = New String() {}
       For Each p As Panel In Me.flp.Controls
         For Each cb As CheckBox In p.Controls.Find("cb", True)
          If cb.Checked Then
            ReDim Preserve s(i)
            s(i) = cb.Tag
            i += 1
            Exit For
          End If
         Next
       Next
       Dim t As String = "Ficheros seleccionados: "
       For j As Integer = 0 To s.GetUpperBound(0)
         ReDim Preserve CDFCCB.Ficheros(j)
         CDFCCB.Ficheros(j) = s(j)
         t &= vbCrLf & s(j)
       Next
       MessageBox.Show(t)
       LiberarMemoriaDelFormulario()
      End Sub
    
      Private Sub LiberarMemoriaDelFormulario()
       Try
         For Each flp As FlowLayoutPanel In Me.Controls
          For Each p As Panel In flp.Controls
            For Each cb As CheckBox In p.Controls
             cb.Dispose()
            Next
            For Each pb As PictureBox In p.Controls
             pb.Image = Nothing
             pb.Dispose()
            Next
            p.Dispose()
          Next
          flp.Dispose()
         Next
         Me.Dispose()
       Catch ex As Exception
         MessageBox.Show("Error eliminando los thumbnails:" & vbCrLf & ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error)
       End Try
      End Sub
    
    

    Inmediatamente después, en la clase principal, se ejecuta lo siguiente:

      Shared Sub EliminarThumbnails(ByVal directorio As DirectoryInfo)
       Dim ex As Exception = Nothing
       Do While Directory.Exists(directorio.ToString) And ex Is Nothing
         Try
          For Each f As FileInfo In directorio.GetFiles
            'Kill(f.FullName)
            f.Delete()
          Next
         Catch ex
          MessageBox.Show("Error eliminando los ficheros de la carpeta " & directorio.Name & ":" & vbCrLf & ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error)
         End Try
         Try
          If directorio.Exists Then directorio.Delete()
         Catch ex
          MessageBox.Show("Error eliminando la carpeta " & directorio.Name & ":" & vbCrLf & ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error)
         End Try
       Loop
       If ex Is Nothing Then
         MessageBox.Show("El directorio " & directorio.Name & " y sus ficheros han sido eliminados correctamente", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
       End If
      End Sub
    
    
    He estado probando varias opciones, el Kill comentado entre otras, pero el caso es que me acaba apareciendo el siguiente error:

    "El proceso no puede obtener acceso al archivo 'P9130802 - copia.JPG' porque está siendo utilizado en otro proceso."

    El proceso, según parece, es el vshost.exe, es decir, el propio depurador de Visual Studio, según creo haber encontrado.

    Quería saber si tengo alguna forma de solucionar esto, por ejemplo liberando cada fichero de cualquier proceso que lo tenga abierto, o algo similar.

    El programa realmente funciona bien, pero es un engorro tener que clicar sobre el error y que la carpeta, que se crea temporalmente para almacenar los thumbnails, no se pueda eliminar.

    Gracias de antemano por vuestra ayuda.

     

    jueves, 2 de junio de 2011 15:27

Todas las respuestas

  • Vaya... acabo de ver que algunas líneas quizá son demasiado largas, y no las he cortado. Pido disculpas. Error de primerizo... :-(

    Por cierto, se acepta cualquier tipo de sugerencia con respecto al código, independientemente de la consulta... El caso es aprender más y mejor!!!

    jueves, 2 de junio de 2011 15:27