|   |   | 
| 
 | Как выбрать файл, а затем переместить его (Ошибка совместного доступа к файлу). | ☑ | ||
|---|---|---|---|---|
| 0
    
        turrist 02.07.15✎ 09:30 | 
        Задача: дать пользователю выбрать файл. Переместить выбранный файл в другой каталог.
 Код кратко: ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Если ДиалогОткрытияФайла.Выбрать() Тогда СтароеПолноеИмяФайла = ДиалогОткрытияФайла.ПолноеИмяФайла; ДиалогОткрытияФайла = Неопределено; ПереместитьФайл(СтароеПолноеИмяФайла, НовоеПолноеИмяФайла); КонецЕсли; Получаю ошибку: Ошибка совместного доступа к файлу. Получается метод ДиалогОткрытияФайла.Выбрать() блокирует файл. Как решить эту проблему? | |||
| 1
    
        ДенисЧ 02.07.15✎ 09:33 | 
        Либо прав нет, либо кто-то ещё его держит     | |||
| 2
    
        dsdred 02.07.15✎ 09:35 | 
        1 Проверь уровень доступа к файлу
 (Если нет прав можно получить их FSO = Новый COMОбъект("Scripting.FileSystemObject"); FileFSO = FSO.GetFile(ИмяФайлаПриемника); FileFSO.Attributes=0;) 2 КопироватьФайл(ИмяФайлаИсточника, ИмяФайлаПриемника); | |||
| 3
    
        turrist 02.07.15✎ 09:50 | 
        Права есть. файл доступен для удаления до вызова
 ДиалогОткрытияФайла.Выбрать() Блокировка снимается только после закрытия сессии 1С. | |||
| 4
    
        turrist 02.07.15✎ 09:52 | 
        ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
 Если ДиалогОткрытияФайла.Выбрать() Тогда СтароеПолноеИмяФайла = ДиалогОткрытияФайла.ПолноеИмяФайла; ДиалогОткрытияФайла = Неопределено; FSO = Новый COMОбъект("Scripting.FileSystemObject"); FileFSO = FSO.GetFile(ФайлПользователяПолноеИмя); FileFSO.Attributes=0; ПереместитьФайл(СтароеПолноеИмяФайла, НовоеПолноеИмяФайла); КонецЕсли; Что это дает? Проблема осталась. | |||
| 5
    
        turrist 02.07.15✎ 09:53 | 
        ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
 Если ДиалогОткрытияФайла.Выбрать() Тогда СтароеПолноеИмяФайла = ДиалогОткрытияФайла.ПолноеИмяФайла; ДиалогОткрытияФайла = Неопределено; FSO = Новый COMОбъект("Scripting.FileSystemObject"); FileFSO = FSO.GetFile(СтароеПолноеИмяФайла); FileFSO.Attributes=0; ПереместитьФайл(СтароеПолноеИмяФайла, НовоеПолноеИмяФайла); КонецЕсли; Что это дает? Проблема осталась. | |||
| 6
    
        Господин ПЖ 02.07.15✎ 09:53 | 
        >Получается метод ДиалогОткрытияФайла.Выбрать() блокирует файл. 
 настроить Process Monitor и посмотреть что происходит | |||
| 7
    
        AllJoke 02.07.15✎ 09:56 | 
        Если ДиалогОткрытияФайла.Выбрать() Тогда 
 СтароеПолноеИмяФайла = ДиалогОткрытияФайла.ПолноеИмяФайла; ДиалогОткрытияФайла = Неопределено; КонецЕсли; ПереместитьФайл(СтароеПолноеИмяФайла, НовоеПолноеИмяФайла); если так? | |||
| 8
    
        turrist 02.07.15✎ 09:56 | 
        Process Monitor  это https://ru.wikipedia.org/wiki/FileMon ?     | |||
| 9
    
        Господин ПЖ 02.07.15✎ 09:57 | 
        (8) нету уже давно никакого filemon     | |||
| 10
    
        turrist 02.07.15✎ 09:59 | 
        (7) В полном коде у меня примерно так и есть. 
 Не то. | |||
| 11
    
        turrist 02.07.15✎ 09:59 | ||||
| 12
    
        Лефмихалыч 02.07.15✎ 10:05 | 
        (3) Выбрать() ни чего не блокирует. Просто у тебя там вокруг еще какой-то код есть, который ты не показываешь и который, собственно, виноват в просиходящем     | |||
| 13
    
        stix2010 02.07.15✎ 10:06 | 
        ПереместитьФайл() за конструкцию Выбрать(), не?     | |||
| 14
    
        turrist 02.07.15✎ 10:06 | 
        (12) ОК. Сейчас попробую выполнить краткий пример.     | |||
| 15
    
        Господин ПЖ 02.07.15✎ 10:06 | 
        (11) ага     | |||
| 16
    
        turrist 02.07.15✎ 10:07 | 
        (13) Да. Удаление файлов у меня отложено до других событий.     | |||
| 17
    
        AllJoke 02.07.15✎ 10:17 | 
        смотри код, у меня всё рабоатет, только я вот это     | |||
| 18
    
        AllJoke 02.07.15✎ 10:17 | 
        (+17) ДиалогОткрытияФайла = Неопределено; - закомментировал     | |||
| 19
    
        AllJoke 02.07.15✎ 10:19 | 
        (+18) да оно даже и не имеет значения.     | |||
| 20
    
        turrist 02.07.15✎ 10:28 | 
        (12) Выполнил тестовый пример.
 ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Если ДиалогОткрытияФайла.Выбрать() Тогда // при этом блокирует выбранный файл СтароеПолноеИмяФайла = ДиалогОткрытияФайла.ПолноеИмяФайла; ДиалогОткрытияФайла = Неопределено; КонецЕсли; НовоеПолноеИмяФайла = СокрЛП(Константы.КаталогОбщихФайлов.Получить()) + "\1.jpg"; ПереместитьФайл(СтароеПолноеИмяФайла, НовоеПолноеИмяФайла); Действительо работает! Буду дальше смотреть что его блокирует. По результату отпишу. Всем спасибо. | |||
| 21
    
        turrist 02.07.15✎ 11:54 | 
        Опытным путем установил что блокировка файла происходит при выполнении 
 ДиалогОткрытияФайла.Выбрать() если установлено свойство ДиалогОткрытияФайла.ПредварительныйПросмотр = Истина; | |||
| 22
    
        turrist 02.07.15✎ 11:57 | 
        Релиз 8.3 (8.3.5.1517)
 Возникает вопрос как совместить предварительный просмотр при открытии файла и отсутствие блокировки для последующего перемещения выбранного файла. | |||
| 23
    
        Fedor-1971 02.07.15✎ 12:36 | 
        (21) возможно, у тебя в проводнике включено окно автопросмотра. Позакрывай все окна с расположением твоего файла и смотри на его перемещение, например, через TotalCommander.     | |||
| 24
    
        turrist 02.07.15✎ 13:00 | 
        (23) Именно так.  Включено окно автопросмотра. Файл блокируется в момент отображения в окне предпросмотра.     | |||
| 25
    
        Fedor-1971 02.07.15✎ 13:07 | 
        (24) я про другое, если открыта папка (не из 1С, а просто так с винды) с твоим файлом и в ней указан автопросмотр, то он блокирует твой файл, даже если ничего не показывает.
 Признак сей бороды у (17) работает, правда он не указал версию 1С (на 8.2 работает без проблем и с автопросмотром и без оного) | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |