|
Как выбрать файл, а затем переместить его (Ошибка совместного доступа к файлу). | ☑ | ||
---|---|---|---|---|
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 работает без проблем и с автопросмотром и без оного) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |