Имя: Пароль:
1C
1С v8
Удаление файла
0 nAPACEHAK
 
20.06.19
16:28
Доброго

Help, pls

С документа сохраняю картинки на диск (хранилище в томах, 1е условие, просто копирую с фактического места в новое)

Если Картинка.Значение.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда
                // проверить фактическое существование файла на томе
                Файл = Новый Файл (Картинка.Значение.ПутьКФайлу);
                Если Файл.Существует() Тогда
                    КопироватьФайл(Картинка.Значение.ПутьКФайлу, ИмяФайлаПриемника);
                    Фото.Вставить(Картинка.Ключ, ИмяФайлаПриемника);
                КонецЕсли;
            ИначеЕсли Картинка.Значение.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда    
                СсылкаНаДвоичныеДанные = РаботаСФайлами.ДанныеФайла(ОбСсылка[Картинка.Ключ], УИД).СсылкаНаДвоичныеДанныеФайла;
                ДвоичныеДанные = ПолучитьИзВременногоХранилища(СсылкаНаДвоичныеДанные);
                ДвоичныеДанные.Записать (ИмяФайлаПриемника);
                Фото.Вставить(Картинка.Ключ, ИмяФайлаПриемника);
            КонецЕсли;

все хорошо. сохраняются картинки jpeg

Создаю xml, пакую все картинки и хмл в ЗИП
Переношу созданный ЗИП на ФТП, дальше начинаются чудеса. хочу удалить созданный мусор

УдалитьФайлы (....)
ХМЛ, ЗИП - удаляются. JPEG - ошибка доступа к файлу (улетаю в исключение)

джипеги нигде не открываются, ничего с ними не делается кроме копирования как в коде выше. всё.

при чем если остановиться по точке на УдалитьФайлы () - и в проводнике открыть/удалить/перенести/итд картинку , то все удаляется/переносится без намеков что где то картинка кем то заблокирована

1С при удалении картинки падает в исключение
с картинкой действия только из кода выше (скопировать) и добавляю ИмяФайлаПриемника в МассивМусора

куда копать то?
1 mistеr
 
20.06.19
16:43
(0) Process Explorer или Unlocker покажет, кто держит файл.
2 nAPACEHAK
 
20.06.19
16:45
(1) анлокер ничего не кажет. про анлокер первым делом подумалось
3 nAPACEHAK
 
20.06.19
16:45
(1) при чем я спокойно удалю этот файл в проводнике (по точке останова на УдалитьФайлы)
4 hhhh
 
20.06.19
16:46
(3) ну паузу поствьте, чтобы успело скопироваться
5 RomanYS
 
20.06.19
16:55
База серверная?
6 nAPACEHAK
 
20.06.19
16:59
(4) там же КопироватьФайл а не НачатьКопированиеФайла
Так что файл должен быть скопирован после этой ф-и

(5) Файловая
7 PuhUfa
 
20.06.19
17:00
(0) А с чего ты взял, что "ошибка доступа к файлу" это обязательно из-за того что кто то "держит" файл?
8 hhhh
 
20.06.19
17:03
(6) нет, не должен быть скопирован сразу. Файл копируется, а 1с-ка идет дальше, и первые несколько секунд файл захвачен.
9 Кодер
 
20.06.19
17:09
Посчитай в цикле до миллиона, потом удаляй.
10 PiotrLoginov
 
20.06.19
17:16
(8) а можно посомневаться?
(9) да ну нафиг, это профанство

ТС, проблема же только с файлами JPG? тут что-то другое. Может, у них размер значительно больше, чем у других?
11 mistеr
 
20.06.19
17:18
Может антивирус держит, пока проверяет.
12 Кодер
 
20.06.19
17:23
(10) Можно в цикле удалять, результат тот же, нагрузка на комп больше.
13 hhhh
 
20.06.19
17:29
(10) 100% на КопироватьФайл 1с-ка не останавливается. Она запускает копирование и идет дальше.
14 PiotrLoginov
 
20.06.19
18:13
(13) ничего себе. спасибо
15 Вафель
 
20.06.19
18:17
сам 1с держит еще. но держит недолго поэтому ты не успеваешь увидеть.
тут бы sleep сделать, но его нет
16 mistеr
 
20.06.19
18:18
(15) Есть ping :)
17 Вафель
 
20.06.19
18:18
(16) ну если так смотреть,то есть100500 способов слиип
18 nAPACEHAK
 
21.06.19
08:41
блин. если после копирования каждого файла еще и паузу делать..... эдак обработка в нирвану уйдет (((
19 Pro1001C
 
21.06.19
08:52
попробуйте удалять через попытку/исключение в цикле с заданным числом итераций, чтобы паузу не делать больше, чем нужно
20 nAPACEHAK
 
21.06.19
09:02
(19) не. нафиг опять же эти паузы
21 nAPACEHAK
 
21.06.19
09:03
в общем все проще оказалось. после сохранения из храниища - к файлу прилетал "толькоЧтение", что не давало удалять

ВыбФайл = Новый Файл(Удалить);
Если ВыбФайл.Существует() Тогда
  Если ВыбФайл.ПолучитьТолькоЧтение() Тогда
    ВыбФайл.УстановитьТолькоЧтение(Ложь);
  КонецЕсли;
  УдалитьФайлы(Удалить);                      
КонецЕсли;
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший