|
|
Почему УдалитьФайлы ошибка после закрытия ЧтениеТекста? |
☑ |
|
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);
Штрихкод = СокрЛП(ЧтениеТекста.Прочитать());
ЧтениеТекста.Закрыть();
ЧтениеТекста = Неопределено;
все ок стало
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший