Eliminar un archivo que está siendo utilizado por otro proceso

Estoy intentando eliminar un archivo de forma programática, pero el archivo aparentemente está siendo utilizado por otro proceso (que es mi progtwig). Básicamente, el progtwig carga imágenes de una carpeta utilizando FromUri para crear un bitmap, que luego se carga en una matriz de imágenes, que a su vez se convierte en el elemento secundario de un panel de distribución. No es muy eficiente, pero funciona.

Intenté borrar los hijos del panel de stack y hacer que las imágenes del conjunto fueran nulas, pero sigo obteniendo la IOException que me dice que el archivo está siendo utilizado por otro proceso.

¿Hay alguna otra forma de eliminar el archivo de los procesos de mi aplicación?

Para liberar un archivo de imagen después de cargarlo, debe crear sus imágenes configurando el indicador BitmapCacheOption.OnLoad . Una forma de hacer esto sería esta:

 string filename = ... BitmapImage image = new BitmapImage(); image.BeginInit(); image.CacheOption = BitmapCacheOption.OnLoad; image.UriSource = new Uri(filename); image.EndInit(); 

Aunque la configuración de BitmapCacheOption.OnLoad funciona en un BitmapImage que se carga desde un Uri de archivo local, esto no se documenta en ninguna parte. Por lo tanto, una forma probablemente mejor o más segura es cargar la imagen desde un FileStream, estableciendo la propiedad StreamSource lugar de UriSource :

 string filename = ... BitmapImage image = new BitmapImage(); using (var stream = File.OpenRead(filename)) { image.BeginInit(); image.CacheOption = BitmapCacheOption.OnLoad; image.StreamSource = stream; image.EndInit(); } 

puede ser un problema de recolección de basura.

 System.GC.Collect(); System.GC.WaitForPendingFinalizers(); File.Delete(picturePath); 

Otra forma es borrar el archivo. Cargue su archivo usando la clase FileStream y libere un archivo a través de la secuencia. Deshacer (); nunca le dará la excepción “El proceso no puede acceder al archivo” porque está siendo utilizado por otro proceso “.

 using (FileStream stream = new FileStream("test.jpg", FileMode.Open, FileAccess.Read)) { pictureBox1.Image = Image.FromStream(stream); stream.Dispose(); } // delete your file. File.Delete(delpath); 

Perdón mi Inglés es malo. Espero ayudar:

 var uploadedFile = Request.Files[0]; //Get file var fileName = Path.GetFileName(uploadedFile.FileName); //get file name string fileSavePath = Server.MapPath(fileName); //get path uploadedFile.SaveAs(fileSavePath); //saving file FileInfo info = new FileInfo(fileSavePath);//get info file //the problem ocurred because this, FileStream s = new FileStream(fileSavePath, FileMode.Open); //openning stream, them file in use by a process System.IO.File.Delete(fileSavePath); //Generete a error //problem solved here... s.Close(); s.Dispose(); System.IO.File.Delete(fileSavePath); //File deletad sucessfully! 

desde mi punto de vista, la respuesta general sería retroceder el objeto que mantiene un proceso abierto con el archivo que desea eliminar. En mi caso, se trataba de un MailMessage, pero también podría ser un hilo, una cadena de archivos, etc., que necesita deshacerse.

Tuve el problema similar. La única diferencia era que estaba usando Binding (patrón MVVM). No funcionó mucho, luego lo Mode=OneWay todo e intenté con Binding Mode=OneWay junto con GC.Collect() antes de llamar a File.Delete(path) y funcionó finalmente.

Tuve el mismo problema. El problema que tuve fue con openFileDialog y saveFileDialog con el siguiente conjunto:

MyDialog.AutoUpgradeEnabled = false;

Comenté esa línea y se resolvió.