Имя: Пароль:
1C
1С v8
как удалить файл из 1с выдает вот такую ошибку
0 Sova112
 
15.01.16
09:08
а (УдалитьФайлы)
УдалитьФайлы( Выборка.КаталогБазыДанных );
по причине:
Ошибка удаления файлов
по причине:
Ошибка совместного доступа к файлу '\IBank\1.txt'. 32(0x00000020): Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.
1 Lexey_
 
15.01.16
09:10
(0) закрыть приложение, использующее этот файл
2 Ник второй
 
15.01.16
09:11
(0) А что в тексте ошибки не понятно?

1С, да и любая другая программа, удалить файл, который использует сторонняя программа не сможет. Освободи и удаляй
3 Sova112
 
15.01.16
09:11
так я закрываю 1с и могу удалить файл
4 Sova112
 
15.01.16
09:12
как в 1с отклчится от файла тогда
5 Ник второй
 
15.01.16
09:13
(4) Все телепаты и знают как твоя программа заняла этот файл и темболее что это за файл
6 Фрэнки
 
15.01.16
09:13
(4) у тебя в самой 1С где-то в коде, написанном выше попытки удаления, файлы оказались заняты.
7 Lexey_
 
15.01.16
09:15
(4) уничтожить/закрыть объект встроенного языка, использующий файл
8 Lexey_
 
15.01.16
09:16
+(7)если ЧтениеТекста, то Закрыть()
9 Sova112
 
15.01.16
09:16
вот у меня весь код
    Попытка
                Текст=Новый ТекстовыйДокумент;
                Текст.Прочитать(Выборка.КаталогБазыДанных);    
                Для Ном = 1 По Текст.КоличествоСтрок() Цикл                
                    Стр=СокрЛП(Текст.ПолучитьСтроку(Ном));                        
                    НР=Найти(Стр,"=");
                    Если НР>0 Тогда
                        ИмяПоля=Сред(Стр,1,НР-1);
                        ЗначениеПоля=Сред(Стр,НР+1);
                        Если ИмяПоля="РасчСчет" Тогда
                            Если ЗначениеПоля=СокрЛП(Выборка.База.НомерСчета) Тогда
                                БазаСовпадает=ИСТИНА;
                            КонецЕсли;    
                        КонецЕсли;    
                    КонецЕсли;    
                КонецЦикла;
            Исключение    
                Сообщить("Не Загружен "+СокрЛП(Выборка.База)+" !!!!!!!!!!!!!!!!!!!!!!!!!!!");
            КонецПопытки;
        КонецПопытки;

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

УдалитьФайлы( Выборка.КаталогБазыДанных );

если убираю чтение текста, то все норм удаляется
10 Фрэнки
 
15.01.16
09:27
(9) может быть попробовать перед прочтением из файла задать свойство объекта Текст.ТолькоПросмотр ( для объекта ТекстовыйДокумент )
11 Futarkh
 
15.01.16
09:28
(9) А если сделать Текст="" то удалит?
12 Futarkh
 
15.01.16
09:28
+(11) Перед УдалитьФайлы(...)
13 Sova112
 
15.01.16
09:31
(10) то же самое
14 Sova112
 
15.01.16
09:34
(11) тоже пишет ошибка совместного доступа
15 НЕА123
 
15.01.16
09:42
ЧтениеТекста = Новый ЧтениеТекста(Выборка.КаталогБазыДанных);
......
ЧтениеТекста.Закрыть();
16 НЕА123
 
15.01.16
09:43
(15)+
как вариант.
17 Lexey_
 
15.01.16
09:43
(14) а весь ли код в(9)?
18 hhhh
 
15.01.16
09:47
(14)

КопироватьФайл(Выборка.КаталогБазыДанных, НовоеИмяФайла);
УдалитьФайлы( Выборка.КаталогБазыДанных );

надо наверно паузу вставить между этими двумя командами. А то получается, что одновременно запускаешь и копирование и удаление. Они параллельно у тебя работают. Какую-нибудь там задержку поставь, 5 секунд. Или 10 секунд. Между этими двумя строчками.
19 Futarkh
 
15.01.16
09:49
Как видно из (9) файл по пути Выборка.КаталогБазыДанных используется в Текст=Новый ТекстовыйДокумент;
                Текст.Прочитать(Выборка.КаталогБазыДанных);
и КопироватьФайл(Выборка.КаталогБазыДанных, НовоеИмяФайла);

Чтобы освободить файл надо убить объект Текст и дождаться окончания копирования
20 НЕА123
 
15.01.16
09:49
(18)
да, вероятнее всего так.
21 Lexey_
 
15.01.16
09:52
(18) почему параллельно? Это ж не НачатьКопированиеФайла
22 Фрэнки
 
15.01.16
09:53
(18) (20) так он все равно "открыт" уже...
я бы попробовал переписать код на вариант (15)
23 hhhh
 
15.01.16
09:58
(21) копирование может идти несколько секунд. Программа не ждет, а просто тупо идет дальше. Так всегда было.
24 Serg_1960
 
15.01.16
10:01
Весь мозг сломал, пока читал твой код. поэтому я его сократил, чтобы нагляднее было конфликтная ситуация :)

Текст.Прочитать(Выборка.КаталогБазыДанных);
КопироватьФайл(Выборка.КаталогБазыДанных, НовоеИмяФайла);
УдалитьФайлы(Выборка.КаталогБазыДанных);
25 Lexey_
 
15.01.16
10:05
(23) никогда такого не было, в чем тогда отличие от асинхронной НачатьКопированиеФайла?
26 hhhh
 
15.01.16
10:07
(25) наоборот, НачатьКопированиеФайла никогда не было. Оно появилось в 8.3, всего несколько месяцев назад. А до него десятки лет ведь работало. Не было никаких Начать копирование.
27 Lexey_
 
15.01.16
10:12
(26) я имею ввиду, никогда не было такого, что "Программа не ждет, а просто тупо идет дальше". А в асинхронной НачатьКопированиеФайла, да идет дальше и не ждет, пока закончится копирование, на то она и асинхронная
28 ЧеловекДуши
 
15.01.16
10:20
(18) Пока копируется, 1С висит :)
29 ЧеловекДуши
 
15.01.16
10:20
(23) Разве? :)