-1

i created two images 1st one is Barcode Image and 2nd is SkuImage after that I Merged It in 3rd image(final Image). after Successfully Merged i want to delete Barcode Image and Sku image from Specific folder, but when i try to delete image file it Gives me a error i.e "The process cannot access the file \Path\ because it is being used by another process". before deleting i disposed the image like this "SkuImage.Dispose()" but it doesnt delete. How do i delete this?

barcodeImage = b.Encode(BarcodeLib.TYPE.CODE128, "001234", Color.Black, Color.White, 113, 18);
Bitmap SkuImage = new Bitmap(113, 18, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
RectangleF rectf = new RectangleF(10, 5, 113, 18);
Graphics graphics = Graphics.FromImage(SkuImage);
// SkuImage.SetPixel(10,10,Color.Blue);
graphics.DrawString(StringToEncode, new Font("Arial", 4), Brushes.Black, rectf);
b.SaveImage(MemStream, savetype);
MemStream.Close();
barcodeImage.Dispose();
SkuImage.Save(imgSkupath);
SkuImage.Dispose();
g.Clear(Color.White);   //here change BG color of Image
g.DrawImage(Image.FromFile("E:\\" + @"Pankaj/BarcodeDemo/BarcodeDemo/BarcodeImage/" + Filename), new Point(15, 15));
g.DrawImage(Image.FromFile("E:\\" + @"Pankaj/BarcodeDemo/BarcodeDemo/BarcodeImage/Sku.jpg"), new Point(25, 30));
img.Save("E:\\" + @"Pankaj/BarcodeDemo/BarcodeDemo/BarcodeImage/FinalImage.jpeg", ImageFormat.Jpeg);
File.Delete("E:\\" + @"Pankaj/BarcodeDemo/BarcodeDemo/BarcodeImage/Sku.jpg");
File.Delete("E:\\" + @"Pankaj/BarcodeDemo/BarcodeDemo/BarcodeImage/" + Filename);
Mahdi
  • 3,199
  • 2
  • 25
  • 35
pankaj
  • 3
  • 4
  • g (in DrawImage) keeps your files open. Dispose g and the file locks will be released. Or load images explicitly and after DrawImage dispose them. – PepitoSh Jun 04 '18 at 09:00
  • @Amit Yes it didnt work.. File.Delete("E:\\" + @"Pankaj/BarcodeDemo/BarcodeDemo/BarcodeImage/Sku.jpg"); – pankaj Jun 04 '18 at 09:17
  • 2
    [`Image.FromFile` keeps the file in use. You can use `Image.FromStream` instead.](https://stackoverflow.com/a/38830222/3110834) – Reza Aghaei Jun 04 '18 at 09:54
  • Thanks Reza Aghaei i tried this g.DrawImage(Image.FromStream(fileStream1), new Point(15, 15)); g.DrawImage(Image.FromStream(fileStream2), new Point(25, 30)); fileStream1.Close(); fileStream2.Close(); and its Worked For Me.... – pankaj Jun 04 '18 at 10:14

3 Answers3

0

You should dispose every class that implements IDisposable. Then you can delete the image file.

0
               string Filename = "Barcodeimage" + i + ".jpeg";



                string imgsavepath = "E:\\Pankaj\\BarcodeDemo\\BarcodeDemo\\BarcodeImage\\" + "BarcodeImg.jpeg";

                string imgSkupath = "E:\\Pankaj\\BarcodeDemo\\BarcodeDemo\\BarcodeImage\\" + "Sku.jpeg";
                BarcodeLib.SaveTypes savetype = BarcodeLib.SaveTypes.UNSPECIFIED;
                savetype = BarcodeLib.SaveTypes.JPG;
                System.IO.FileStream MemStream = new FileStream(imgsavepath, FileMode.Create, FileAccess.Write);

                System.Drawing.Image barcodeImage = null;
                //Bitmap FinalImage = null;
                BarcodeLib.Barcode b = new BarcodeLib.Barcode();


                //b.IncludeLabel = true;
                b.LabelFont = new Font("Arial", 5);

                string sku = "SKU:VXN4214IN";
                string StringToEncode = "16280/" + i + ' ' + sku;

                Image img = new Bitmap(130, 50);  //final image

                Graphics g = Graphics.FromImage(img);


                barcodeImage = b.Encode(BarcodeLib.TYPE.CODE128, "001234", Color.Black, Color.White, 113, 18);



                Bitmap SkuImage = new Bitmap(113, 18, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

                RectangleF rectf = new RectangleF(10, 5, 113, 18);
                Graphics graphics = Graphics.FromImage(SkuImage);
                // SkuImage.SetPixel(10,10,Color.Blue);
                graphics.DrawString(StringToEncode, new Font("Arial", 4), Brushes.Black, rectf);



                b.SaveImage(MemStream, savetype);
                MemStream.Close();
                barcodeImage.Dispose();

                SkuImage.Save(imgSkupath);
                graphics.Dispose();
                SkuImage.Dispose();

                g.Clear(Color.White);   //here change BG color of Image



                System.IO.FileStream fileStream1 = new FileStream("E:\\" + @"Pankaj/BarcodeDemo/BarcodeDemo/BarcodeImage/BarcodeImg.jpeg", FileMode.Open, FileAccess.Read);

                System.IO.FileStream fileStream2 = new FileStream("E:\\" + @"Pankaj/BarcodeDemo/BarcodeDemo/BarcodeImage/Sku.jpeg", FileMode.Open, FileAccess.Read);


                g.DrawImage(Image.FromStream(fileStream1), new Point(15, 15));
                g.DrawImage(Image.FromStream(fileStream2), new Point(25, 30));
               // g.DrawImage(Image.FromFile("E:\\" + @"Pankaj/BarcodeDemo/BarcodeDemo/BarcodeImage/" + Filename), new Point(15, 15));
                //g.DrawImage(Image.FromFile("E:\\" + @"Pankaj/BarcodeDemo/BarcodeDemo/BarcodeImage/Sku.jpg"), new Point(25, 30));



                img.Save("E:\\" + @"Pankaj/BarcodeDemo/BarcodeDemo/BarcodeImage/"+Filename, ImageFormat.Jpeg);

                fileStream1.Close();
                fileStream2.Close();
                g.Dispose();

                 File.Delete("E:\\" + @"Pankaj/BarcodeDemo/BarcodeDemo/BarcodeImage/Sku.jpeg");
                 File.Delete("E:\\" + @"Pankaj/BarcodeDemo/BarcodeDemo/BarcodeImage/BarcodeImg.jpeg");
pankaj
  • 3
  • 4
0
Dim _strImagePath = ""
Dim _strImageName = "image.jpg"

'Get the path
_strImagePath = "YOUR_IMAGE_PATH"

'Delete the image physically
Dim strImageName As New FileInfo(_strImagePath & _strImageName)
If strImageName.Exists Then
   strImageName.Delete()
End If
Rami Zebian
  • 539
  • 1
  • 5
  • 23