murkalkiran Ответов: 2

Не удается удалить файл из папки


Привет, я пытаюсь удалить файл из папки с помощью c#

Я читаю диаграмму excel из excel и преобразую диаграмму в изображение и сохраняю в локальной папке для другого использования , как только я использую изображение теперь я хочу удалить это изображение, указав путь, но я получаю ошибку, как "
System.IO.IOException: 'The process cannot access the file 'D:\chart\86e740b9-83bc-470e-9e03-efa9864b1d8e.jpg' because it is being used by another process.'
"

Что я уже пробовал:

{
Workbook wb = new Workbook("D:\\chart\\Qchart.xlsx");

            // Access the first worksheet
            Worksheet worksheet = wb.Worksheets[0];
            StringBuilder Reportbuilder = new StringBuilder();
            Reportbuilder.Append("<html>");
            Reportbuilder.Append("<header>");
            Reportbuilder.Append("</header>");
            Reportbuilder.Append("<body>");
            Reportbuilder.Append("<table style='width:100%;' >");
            foreach (var sec in SectionList)
            {
                Guid secGuid;

                secGuid = Guid.NewGuid();

                worksheet.Cells["D6"].PutValue(sec.PerformanceScore);
                // Set the print area with your desired range
                worksheet.PageSetup.PrintArea = "AH4:BG25";

                // Set all margins as 0
                worksheet.PageSetup.LeftMargin = 0;
                worksheet.PageSetup.RightMargin = 0;
                worksheet.PageSetup.TopMargin = 0;
                worksheet.PageSetup.BottomMargin = 0;

                // Set OnePagePerSheet option as true
                ImageOrPrintOptions options = new ImageOrPrintOptions();
                options.OnePagePerSheet = true;
                //options. = ImageFormat.Jpeg;
                options.HorizontalResolution = 200;
                options.VerticalResolution = 200;

                // Take the image of your worksheet
                SheetRender sr = new SheetRender(worksheet, options);
                sr.ToImage(0, "D:\\chart\\"+secGuid+".jpg");
                byte[] Imge = convertImageTobytes("D:\\chart\\" + secGuid + ".jpg");
               
                Reportbuilder.Append("<tr>'"+sec.SectionName+"'");
                Reportbuilder.Append("</tr>");
                Reportbuilder.Append("<tr><img   src='data:image/png;base64," + @System.Convert.ToBase64String(Imge) + "'/> </tr>");
                DeleteImage("D:\\chart\\" + secGuid + ".jpg");
                foreach (var question in sec.ListQuestions)
                {

                }
            }

            Reportbuilder.Append("</body>");
            Reportbuilder.Append("</table>");





            return char111t;
        }

        public byte[] convertImageTobytes(string path)
        {
            System.Drawing.Image img = System.Drawing.Image.FromFile(path);
            byte[] bytes;
            using (MemoryStream ms = new MemoryStream())
            {
                img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                bytes = ms.ToArray();
                ms.Dispose();
                ms.Close();
            }
            return bytes;
        }

        public void DeleteImage(string path)
        {
            if ((System.IO.File.Exists(path)))
            {
                System.IO.File.Delete(path);
            }
        }

		    
                    

2 Ответов

Рейтинг:
2

Patrice T

В каком слове ты не понимаешь

System.IO.IOException: 'The process cannot access the file 'D:\chart\86e740b9-83bc-470e-9e03-efa9864b1d8e.jpg' because it is being used by another process.'

По замыслу ОС запрещает вам удалять используемый файл.
Решение: подождите, пока файл больше не будет использоваться.


murkalkiran

Я могу удалить файл изображения вручную перед этой строкой byte[] Imge = convertImageTobytes("D:\\chart\\" + secGuid + ".jpg"); выполнить
но после преобразования yo byte array я не могу удалить вручную также, я пытаюсь удалить вручную это показывает "действие не может быть завершено, потому что файл открыт в .Net Core Host"

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

Рейтинг:
12

0x01AA

Для System.Drawing.Image.FromFile видеть здесь Изображение.Метод FromFile (System.Чертеж) | Microsoft Docs[^]в своих замечаниях:

The file remains locked until the Image is disposed.


murkalkiran

Спасибо, что он сработал после того, как сделал img.Dispose(); в функции convertImageTobytes

manosabari

спасибо