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

Samoylov_83

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

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 379
Благодарностей
3 304
Баллы
113
Старая проблема, как решение: тык
 
  • Спасибо
Реакции: Samoylov_83

Samoylov_83

Client
Регистрация
25.08.2015
Сообщения
228
Благодарностей
69
Баллы
28

doc

Client
Регистрация
30.03.2012
Сообщения
8 613
Благодарностей
4 601
Баллы
113

Samoylov_83

Client
Регистрация
25.08.2015
Сообщения
228
Благодарностей
69
Баллы
28
Регистрация
12.07.2014
Сообщения
916
Благодарностей
371
Баллы
63
Всем привет та же проблема, но в 1 поток и в PM. Притом как то не стабильно вылетает ошибка. Может несколько часов работать и нет ее, а то частит подряд.
Шаблон в данном месте скачивает картинку-заглушку с ютуба и определяет её размер, после этого удаляет.

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


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

Вложения

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 106
Баллы
113
  • Спасибо
Реакции: Сибиряк
Регистрация
12.07.2014
Сообщения
916
Благодарностей
371
Баллы
63
Что делает код?))
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 106
Баллы
113
  • Спасибо
Реакции: Сибиряк
Регистрация
12.07.2014
Сообщения
916
Благодарностей
371
Баллы
63
Спасибо) но проблема то в другом))
Можно одним скриптом определить размер и удалить картинку?
Что бы не было:
Выполнение действия directory процесс не может получить доступ к файлу "название файла", так как этот файл используется другим процессом.
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 106
Баллы
113
  • Спасибо
Реакции: Сибиряк
Регистрация
12.07.2014
Сообщения
916
Благодарностей
371
Баллы
63
А разве она не решилась?
Скрипт выдает в лог ОК. Я так понял что идет сравнение? Или это присвоение значения?
project.Variables["file_img_size"].Value = img.Width.ToString();
а как сравнить текущую картинку и 160 px, надо что бы картинка была более 160. Тогда ОК.
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 106
Баллы
113
Скрипт выдает в лог ОК.
галочку поставить "Не возвращать значение"
Или это присвоение значения?
Да!
как сравнить текущую картинку и 160 px, надо что бы картинка была более 160. Тогда ОК.
Сравнить ширину и если менее 160px, то удалять эту картинку?
 
  • Спасибо
Реакции: Сибиряк
Регистрация
12.07.2014
Сообщения
916
Благодарностей
371
Баллы
63
Сравнить ширину и если менее 160px, то удалять эту картинку?
Удалять в любом случае. Сама картинка не нужна, нужны ее размеры. Тут я описал для чего все это.
Если картинка более 160 то это нормальная превьюха, то ОК.
Если 160 пикс и менее то NO и идем проверят следующую по размеру превью точно так же.
Если все ОК то пишем в переменную ( maxresdefault.jpg\sddefault.jpg ). Потом это вызывается в html шаблон.
 

Вложения

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 106
Баллы
113
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 и Сибиряк
Регистрация
12.07.2014
Сообщения
916
Благодарностей
371
Баллы
63
Ошибка.
Но скаченный файл удаляется скриптом.
В переменную не возвращает maxresdefault.jpg
 

Вложения

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 106
Баллы
113
  • Спасибо
Реакции: Сибиряк
Регистрация
12.07.2014
Сообщения
916
Благодарностей
371
Баллы
63
Все робит. Спасибо за помощь!
 
  • Спасибо
Реакции: Dimionix

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