Не удаляются директории в многопотоке

  • Автор темы Автор темы Samoylov_83
  • Дата начала Дата начала

Samoylov_83

Client
Регистрация
25.08.2015
Сообщения
228
Реакции
70
Баллы
28
Генерю рандомное название папки, затем получаю картинку кубиком "работа с изображениями" и сохраняю ее в эту папку, затем режу эту картинку на несколько частей этим же кубиком и после пытаюсь удалить папку с этими файлами. В однопотоке все работает, но в многопотоке это 20+ потоков вылазит ошибка "Выполнение действия Directory The process cannot access the file тут имя файла который нужно порезать because it is being used by another process", после этого даже вручную папку не удалить, только выключать зп. Картинки сохраняю на рамдиск, пробовал ставить паузы, циклы, все бестолку. На, что обратить внимание? Версия зп 5.10.1.0.
 
Старая проблема, как решение: тык
 
  • Оценить
Реакции: Samoylov_83
Всем привет та же проблема, но в 1 поток и в PM. Притом как то не стабильно вылетает ошибка. Может несколько часов работать и нет ее, а то частит подряд.
Шаблон в данном месте скачивает картинку-заглушку с ютуба и определяет её размер, после этого удаляет.

Выполнение действия directory процесс не может получить доступ к файлу "название файла", так как этот файл используется другим процессом.


Простых решений как я понял нет?
 

Вложения

  • QIP Shot - Screen 345.png
    QIP Shot - Screen 345.png
    91 KB · Просмотры: 17
Простых решений как я понял нет?
Попробуй так:
C#:
Развернуть Свернуть Копировать
string path = project.Variables["file_img_put"].Value;
Image img = Image.FromFile(path);
project.Variables["file_img_size"].Value = img.Width.ToString();
img.Dispose();
 
  • Оценить
Реакции: Сибиряк
  • Оценить
Реакции: Сибиряк
Спасибо) но проблема то в другом))
Можно одним скриптом определить размер и удалить картинку?
Что бы не было:
Выполнение действия directory процесс не может получить доступ к файлу "название файла", так как этот файл используется другим процессом.
 
Спасибо) но проблема то в другом))
А разве она не решилась?
Можно одним скриптом определить размер и удалить картинку?
В конец этого кода дописать строку
C#:
Развернуть Свернуть Копировать
File.Delete(path);
 
  • Оценить
Реакции: Сибиряк
А разве она не решилась?
Скрипт выдает в лог ОК. Я так понял что идет сравнение? Или это присвоение значения?
project.Variables["file_img_size"].Value = img.Width.ToString();
а как сравнить текущую картинку и 160 px, надо что бы картинка была более 160. Тогда ОК.
 
Скрипт выдает в лог ОК.
галочку поставить "Не возвращать значение"
Или это присвоение значения?
Да!
как сравнить текущую картинку и 160 px, надо что бы картинка была более 160. Тогда ОК.
Сравнить ширину и если менее 160px, то удалять эту картинку?
 
  • Оценить
Реакции: Сибиряк
Сравнить ширину и если менее 160px, то удалять эту картинку?
Удалять в любом случае. Сама картинка не нужна, нужны ее размеры. Тут я описал для чего все это.
Если картинка более 160 то это нормальная превьюха, то ОК.
Если 160 пикс и менее то NO и идем проверят следующую по размеру превью точно так же.
Если все ОК то пишем в переменную ( maxresdefault.jpg\sddefault.jpg ). Потом это вызывается в html шаблон.
 

Вложения

  • QIP Shot - Screen 347.png
    QIP Shot - Screen 347.png
    52,2 KB · Просмотры: 4
C#:
Развернуть Свернуть Копировать
string path = project.Variables["file_img_put"].Value;
Image img = Image.FromFile(path);
int width = img.Width;
img.Dispose();
File.Delete(path);
if (width <= 160) return null;
return "maxresdefault.jpg";
Для избавления от экшена "Определение пути к файлу" и от лишней переменной file_img_put, думаю, можно сделать так:
заменить первую строку кода на
Код:
Развернуть Свернуть Копировать
string path = instance.LastDownloadedFile;
 
Последнее редактирование:
  • Оценить
Реакции: Sanekk и Сибиряк
  • Оценить
Реакции: Сибиряк

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