Процесс не может получить доступ к файлу

iZacNT

Пользователь
Регистрация
05.09.2020
Сообщения
35
Благодарностей
4
Баллы
8
Доброго времени суток!

У меня куча изображений. Заливаются на сайт, по одному, там к ним применяется шаблон и скачивается измененное.
Каждый шаблон требует разные размеры.
Я в C# меняю размеры под требуемые. Сохраняю в папку temp. Код изменения размера и обрезки изображения внизу.

C#:
/**********************************Resized Image for Same size sides*************************/
        project.SendInfoToLog("/************************** Resized Image for Same size sides ***********************************/", true);
        
        string pathToImage = project.Variables["ImagesName"].Value;
        
        Bitmap resizedBitmap = new Bitmap(System.Drawing.Image.FromFile(pathToImage));
        int size = 0;
        if (x!=0){
            size = Convert.ToInt32(project.Variables["Width"].Value);
        }else{
            size = Convert.ToInt32(project.Variables["Height"].Value);
        }
        Bitmap newBitmap = new Bitmap(resizedBitmap,new Size(size, size));

        string savePathImg = project.Directory+@"\Images\temp\"+project.Variables["shortName"].Value+"-resize-"+Convert.ToString(i)+".jpg";
        
        if (System.IO.File.Exists(savePathImg)){
            System.IO.File.Delete(savePathImg);
        }

        project.SendInfoToLog("From Images: "+pathToImage, true);
        project.Variables["fullPathToResizedImage"].Value = savePathImg;

        newBitmap.Save(savePathImg, System.Drawing.Imaging.ImageFormat.Jpeg);
        project.SendInfoToLog("File Path for Save: "+savePathImg, true);
        
        resizedBitmap.Dispose();
        newBitmap.Dispose();
        
    /***************************** End Resized Image for Same size sides*************************/
        
        
        /**************************************** Crop Image ************************************************/
        project.SendInfoToLog("/************************** Crop Image ***********************************/", true);
        
        pathToImage = project.Variables["fullPathToResizedImage"].Value;

        Bitmap croppedBitmap = new Bitmap(System.Drawing.Image.FromFile(pathToImage));

        System.Drawing.Imaging.PixelFormat format = croppedBitmap.PixelFormat;
        
        Bitmap croppedBitmap2 = croppedBitmap.Clone(new Rectangle(x,y,Convert.ToInt32(project.Variables["Height"].Value), Convert.ToInt32(project.Variables["Width"].Value)), format);

        savePathImg = project.Directory+@"\Images\temp\"+project.Variables["shortName"].Value+"-crop-"+Convert.ToString(i)+".jpg";

        project.SendInfoToLog("File Path for Save: "+savePathImg, true);
        project.Variables["fullPathToResizedImage"].Value = savePathImg;
        
        croppedBitmap2.Save(savePathImg, System.Drawing.Imaging.ImageFormat.Jpeg);
    
        croppedBitmap.Dispose();
        croppedBitmap2.Dispose();
        
        /**************************************** End Crop Image ************************************************/

Производятся необходимые деиствия.
После чего в цикле удаляю все изображения созданные в папке temp.


C#:
string[] AllFiles = Directory.GetFiles(project.Directory+"\\ResultImage\\temp","*.png", SearchOption.AllDirectories);
foreach (string filename in AllFiles)
{
    File.Delete(filename);
}

AllFiles = Directory.GetFiles(project.Directory+"\\Images\\temp","*.*", SearchOption.AllDirectories);
foreach (string filename in AllFiles)
{
    File.Delete(filename);
}

Первый цикл применяется для удаления скачанных(измененных) изображений. Я их переименовываю, копирую И храню отдельно
Второй цикл удаляет все обрезки созданные для загрузки Изображения. Вот он то и выдает ошибку. Причем, он может удалить нормально обрезки после 10 изображений (тоесть происходит полный цикл работы моего шаблона 10 раз: берется изображение, изменяется размер, обрезается на разные ласкутки, загружается на сайт, применяется к шаблону сайта, Скачивается новое изображение, удалется все из папок temp) а на 11( или 15) раз выдает ошибку "Выполнение действия CSharp OwnCode: Delete Temp Files. Процесс не может получить доступ к файлу "D:\Projects\ResizeImage\Images\temp\Bouteille isotherme berculbor - Somydrink™-resize-0.jpg", так как этот файл используется другим процессом."

Надеюсь, понятно обьяснил.

Тоесть блок Crop Image не освобождает использованное для своих нужд изображение (метод .Dispose();-)

Как можно исправить ситуацию.
 
  • Спасибо
Реакции: dobrohod

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)