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.