tiene - el proceso no puede obtener acceso al archivo porque está siendo utilizado en otro proceso. c#
Eliminar un archivo que está siendo utilizado por otro proceso (5)
Estoy intentando eliminar un archivo de forma programática, pero el archivo aparentemente está siendo utilizado por otro proceso (que es mi programa). Básicamente, el programa carga imágenes de una carpeta utilizando FromUri para crear un mapa de bits, 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 pila 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?
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);
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 =
new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read))
{
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);
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.