Имя: Пароль:
1C
1С v8
Почему УдалитьФайлы ошибка после закрытия ЧтениеТекста?
0 Garykom
 
01.08.24
17:27
// ...
ИмяФайлаШтрихкода = ПолучитьИмяВременногоФайла("txt");
// ...
ЧтениеТекста = Новый ЧтениеТекста();
Текст = Новый ЧтениеТекста(ИмяФайлаШтрихкода, КодировкаТекста.UTF8);
Штрихкод = СокрЛП(Текст.Прочитать());
ЧтениеТекста.Закрыть();
ЧтениеТекста = Неопределено;
	
Попытка
	УдалитьФайлы(ИмяФайлаШтрихкода);
Исключение
КонецПопытки;
// ...


Ошибка при вызове метода контекста (УдалитьФайлы)
по причине:
Ошибка удаления файлов
по причине:
Ошибка совместного доступа к файлу 'C:\Users\...\Temp\v8_95E8_33.txt'. 32(0x00000020): The process cannot access the file because it is being used by another process.
1 Волшебник
 
01.08.24
17:26
Вам же всё по-английски написали: файл занят
2 Garykom
 
01.08.24
17:28
(1) Как узнать чем?
Какой то антивирус блокирует или что?
3 YFedor
 
01.08.24
17:30
(0), (1) Я полагаю, что 1с же не мгновенно освобождает файл
4 Garykom
 
01.08.24
17:29
Внешнее приложение которое создает файл к этому моменту уже закрылось после ЗапуститьПриложение()
5 Garykom
 
01.08.24
17:30
(3) Эмм. Но как бы встроенные вызовы платформы.
Даже
ЧтениеТекста = Неопределено;
сделал

Предлагается еще добавить паузу?
6 Garykom
 
01.08.24
17:32
(3) Может есть какой то метод для "освобождает файл" ?
7 YFedor
 
01.08.24
17:34
ЧтениеТекста.Закрыть();
ЧтениеТекста = Неопределено;

оно освобождает файл, но не мгновенно же.
Т.е. если ты этот файл открыл, например блокнотом, потом закрыл, потом спозиционировался на нем в проводнике, нажал Дел - он удалился.

Но после закрытия на позиционирование на файле и нажатие кнопки ушли какие-то милисекунды достаточные для того, чтобы файл освободился.

Я думаю так.
8 Garykom
 
01.08.24
17:35
(7) Какой выход?
9 H A D G E H O G s
 
01.08.24
17:38
(8) фоновое задание с паузой
10 H A D G E H O G s
 
01.08.24
17:48
(7) все обычные яп используют closeHandle() при освобождении файловых ресурсов Windows и после этого файл можно удалять хоть откуда. 1С тоже вызовет closeHandle() но уже после возврата управления из прикладного кода.

Конечно, можно подожать через вызов SleepEx(100, true), в надежде, что причина такого поведения 1С в асинхронном вызове WriteFileEx() без ожидания завершения но думаю, не не поможет.
11 Hans
 
01.08.24
18:06
У тебя переменная Текст разве не осталась в памяти?
12 Garykom
 
01.08.24
18:09
(11) мдя ну офигеть я скосячил по невнимательности
сенкс
13 Hans
 
01.08.24
18:09
Текст.Закрыть();
Текст = Неопределено;
14 Garykom
 
01.08.24
18:10
(13) угу скопипащено было из другого места
15 Garykom
 
01.08.24
18:14
исправил
ЧтениеТекста = Новый ЧтениеТекста(ИмяФайлаШтрихкода, КодировкаТекста.UTF8);
Штрихкод = СокрЛП(ЧтениеТекста.Прочитать());
ЧтениеТекста.Закрыть();
ЧтениеТекста = Неопределено;

все ок стало