none
Error al borrar archivo de imagen, "Esta siendo utilizado en otro proceso" RRS feed

  • Pregunta

  • Saludos amigos!

    Solicito de su ayuda para resolver este mensaje que VS me envia en tiempo al ejecutar la aplicación que realizamos en VS 2013 C# WinForms, les comento, el codigo lleva a cabo lo siguiente verificar las imagenes existentes en una carpeta especifica (.jpg,.bmp,.gif) posteriormente las copia a otra subcarpeta con el mismo nombre y extensión, pero reduciendo el peso del archivo; finalmente quiero borrar los archivos de imagen originales, y es en este procedo a traves de un try catch se me envia el presente mensaje:

    Me verifique antes en el foro, alguna respuesta relacionada y encontre una consulta similar donde se le comenta al otro usuario, que libere la imagen a traves de nothing y dispose al picturebox, yo no ocupo picturebox, puesto se hace el proceso al pulsar el boton Generar PDF de este Documento lo hace de inmediato, ya que he realizado pruebas, hasta ahora que tengo necesidad de borrar el archivo original es que tengo el error, les comparto el codigo:

            private void BorraImagenes()
            {
                path = lpRutaDigitalizacion + pClaveAlumno + "\\";
                string[] images = Directory.GetFiles(path);// this array contain ALL files in the specified directory
                int couter = 0; // this will count the number of images in the folder
                for (int i = 0; i < images.Length; i++)
                {
                    // select only the image format in the folder
                    string fileExtention = images[i].Substring(images[i].Length - 3, 3);
                    if (fileExtention == "bmp" || fileExtention == "jpg" || fileExtention == "JPG" || fileExtention == "BMP" || fileExtention == "gif" || fileExtention == "Gif")
                    {
                        couter++;
                        string imageName = images[i].Substring(path.Length, images[i].Length - path.Length - 4);
                        try
                        {
                            // according to type of the file we will save the new image
                            if (fileExtention == "bmp" || fileExtention == "BMP")
                                System.IO.File.Delete(path + imageName + ".bmp");
                            File.Delete(path + imageName + ".bmp");
                            if (fileExtention == "JPG" || fileExtention == "jpg")
                                System.IO.File.Delete(path + imageName + ".jpg");
                            if (fileExtention == "gif" || fileExtention == "GIF")
                                System.IO.File.Delete(path + imageName + ".gif");
                        }
                        catch (System.IO.IOException ex)
                        {
                            MessageBox.Show(ex.Message + ex.StackTrace);
                            throw;
                        }
                    }
                }
                
            }


            private void CompactaImagenesDeCarpeta() 
            {
                path = lpRutaDigitalizacion + pClaveAlumno + "\\";
                DirectoryInfo newDiroctory = new DirectoryInfo(path + pClaveAlumno);
                newDiroctory.Create();
                string newPath = path + "\\" + pClaveAlumno + "\\";
                string[] images = Directory.GetFiles(path);
                int couter = 0;
                for (int i = 0; i < images.Length; i++)
                {
                    string fileExtention = images[i].Substring(images[i].Length - 3, 3);
                    if (fileExtention == "bmp" || fileExtention == "jpg" || fileExtention == "JPG" || fileExtention == "BMP" || fileExtention == "gif" || fileExtention == "Gif")
                    {
                        couter++;
                        Image currentImage = Image.FromFile(images[i]);
                        int h = currentImage.Height;
                        int w = currentImage.Width;
                        float factor = float.Parse("0.75");
                        int newH = (int)Math.Ceiling((double)h * factor);
                        int newW = (int)Math.Ceiling((double)w * factor);
                        string imageName = images[i].Substring(path.Length, images[i].Length - path.Length - 4);
                        Bitmap newBitmap = new Bitmap(currentImage, new Size(newW, newH));
                        if (fileExtention == "bmp" || fileExtention == "BMP")
                            newBitmap.Save(newPath + imageName + ".bmp", ImageFormat.Bmp);
                        if (fileExtention == "JPG" || fileExtention == "jpg")
                            newBitmap.Save(newPath + imageName + ".jpg", ImageFormat.Jpeg);
                        if (fileExtention == "gif" || fileExtention == "GIF")
                            newBitmap.Save(newPath + imageName + ".gif", ImageFormat.Gif);
                        newBitmap.Dispose();
                    }
                }
            }

    Al pulsar el boton llamo a los procedimientos, el error lo envia al borrar el archivo de imagen original:

            private void btnGeneraDocPDF_Click(object sender, EventArgs e)
            {
                CompactaImagenesDeCarpeta();
                BorraImagenes();
                //GeneraPDF();
                //tCerrar.Enabled = true;
            }

    Espero haberme dado a entender, lo que pretendo ya es solo borrar el o los archivos originales, despues de que esten en la carpeta ya actualizados, los insertare en un pdf, para finalmente borrar el directorio y solo quedarme con el .pdf con la o las imagenes incrustadas en el mismo.

    Muchas gracias...

    Atentamente.- Marco Méndez


    • Editado Marco Bueno lunes, 2 de marzo de 2015 15:48 Sintaxis
    lunes, 2 de marzo de 2015 15:45

Respuestas