Копирование файла из папки с пробелом.

1. Intercititude 07.04.21 16:48 Сейчас в теме
Добрый день всем.
Есть путь к файлу :
Откуда = "C:\Users\Public\Pictures\Sample Pictures\Lighthouse.jpg";	


Пытаюсь скопировать файла оттуда в другую папку методом "КопироватьФайлы()"

Но ловлю ошибку "Ошибка копирования файлов.Каталог не обнаружен "из-за того что в "Sample Pictures" пробел.

Пытался и кавычки добавлять, и пробел на символы заменять. Ничего не выходит

Как обойти, не меняя названия папки?

1С:Предприятие 8.2 (8.2.19.130) ОФ
+
Вознаграждение за ответ
Показать полностью
Найденные решения
21. nomad_irk 72 07.04.21 17:15 Сейчас в теме +0.1 $m
(18)К этой серверной папке у сервера 1С доступ есть?

Если есть, то:

Кнопка "Копировать" выполняет следующие действия:

&наКлиенте

ДвоичныеДанные = Новый ДвочиныеДанные(ИмяВыбранногоФайла);

АдресВХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор);

СкопироватьФайлы();


&наСервере
Процедура СкопироватьФайлы()

ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
ДвоичныеДанные = ПолучитьИЗВременногоХранилища(АдресВХранилище);

ДвоичныеДанные.Записать(ИмяВременногоФайла);

ПереместитьФайлы(ИмяВременногоФайла, "ПутьККоторомуЕстьДоступСервера1С" + "\ИмяКонечногоФайла" + ".Расширение");

КонецПроцедуры
Показать
Intercititude; Grivba; +2
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. vadim.semyonov.rzn 07.04.21 16:57 Сейчас в теме
(1)
КопироватьФайлы
Пробел в пути уже давно не является препятствием для 1С. Может быть, дело в том, что процедура выполняется на сервере?
nomad_irk; FatPanzer; +2
7. Intercititude 07.04.21 17:01 Сейчас в теме
(3) Необходимо на сервере как ни крути. Ибо доступа может не быть к папке.
+
10. nomad_irk 72 07.04.21 17:02 Сейчас в теме
(7)Так сервер ничего не знает про указанный путь, у него может не быть вообще диска C

Вам нужен общий сетевой ресурс, к которому у сервера 1С есть доступ.
Общий сетевой ресурс имеет адрес вида \\ИмяМашины\ИмяРесурсаНаМашине
+
15. Intercititude 07.04.21 17:08 Сейчас в теме
(10) И как быть?
Подразумевается что люди буду копировать со своего компьютера файлы.
+
16. nomad_irk 72 07.04.21 17:08 Сейчас в теме
(15)Люди будут копировать куда? Для чего в этом случае использовать 1С в качестве файлового менеджера?
Можно и в проводнике это сделать, разграничив правами: можно записывать, но нельзя читать.
+
18. Intercititude 07.04.21 17:10 Сейчас в теме
(16) В серверную папку к которой у них нету доступа.
+
21. nomad_irk 72 07.04.21 17:15 Сейчас в теме +0.1 $m
(18)К этой серверной папке у сервера 1С доступ есть?

Если есть, то:

Кнопка "Копировать" выполняет следующие действия:

&наКлиенте

ДвоичныеДанные = Новый ДвочиныеДанные(ИмяВыбранногоФайла);

АдресВХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор);

СкопироватьФайлы();


&наСервере
Процедура СкопироватьФайлы()

ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
ДвоичныеДанные = ПолучитьИЗВременногоХранилища(АдресВХранилище);

ДвоичныеДанные.Записать(ИмяВременногоФайла);

ПереместитьФайлы(ИмяВременногоФайла, "ПутьККоторомуЕстьДоступСервера1С" + "\ИмяКонечногоФайла" + ".Расширение");

КонецПроцедуры
Показать
Intercititude; Grivba; +2
23. Intercititude 07.04.21 17:21 Сейчас в теме
&наСервере и &наКлиенте

меня смущает
+
28. Intercititude 07.04.21 17:36 Сейчас в теме
(21) При выборе картинки, сделано так, что автоматически
	ХранилищеКартинки = Новый ХранилищеЗначения(ВыбранноеФото, Новый СжатиеДанных());

Где ХранилищеКартинки = тип.ХранилищеЗначения и он как реквизит справочника.

Как мне использовать ХранилищеКартинки процедуре "СкопироватьФайлы()" подскажите пожалуйста!
+
29. nomad_irk 72 07.04.21 17:41 Сейчас в теме
(28)не делать из картинки ХранилищеЗначения, а использовать сам файл картинки для создания ДвоичныеДанные.

В ХранилищеЗначения смысла нет никакого.
+
30. Intercititude 07.04.21 17:42 Сейчас в теме
(29) Ну в моем случае эта картинка отображается при открытии формы
ЭлементыФормы.Фотография.Картинка = ХранилищеКартинки.Получить());


Но я Вас понял. Спасибо
Буду пробовать

Единственное.ИмяВыбранногоФайла это ДиалогВыбораФайла.ПолноеИмяФайла ?
+
31. nomad_irk 72 07.04.21 17:44 Сейчас в теме
(30)в таком случае создаете из ХранилищеЗначения Двоичные данные и дальше уже сохраняете во временный файл и перемещаете этот временный файл куда вам надо.

все это на сервере.
+
32. nomad_irk 72 07.04.21 17:51 Сейчас в теме
(30)имя выбранного пользователем файла уже было использовано до чтения картинки в хранилище значения. Дальше вам нужно имя файла для сохранения. Можете использовать тоже самое имя, получив его с помощью

Файл = Новый Файл(ИмяВыбранногоПользователемФайла);

имяФайла = Файл.Имя;
+
33. Intercititude 08.04.21 09:21 Сейчас в теме
(21)
ПолучитьИЗВременногоХранилища(АдресВХранилище);


На этом моменте ловлю ошибку,неправильный адрес мол..
+
34. nomad_irk 72 08.04.21 09:26 Сейчас в теме
(33)Каким образом формируется АдресВХранилище и какое он имеет значение при ПолучитьИЗВременногоХранилища(АдресВХранилище)?
+
35. Intercititude 08.04.21 09:26 Сейчас в теме
(34) ДвоичныеДанные = Новый ДвоичныеДанные(ДиалогВыбораФайла.ПолноеИмяФайла);
АдресВХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные,ссылка.УникальныйИдентификатор());


Значение - "ХранилищеЗначения".

И выходит ошибка "Неправильный путь к файлу 'ХранилищеЗначения'"
+
36. nomad_irk 72 08.04.21 09:34 Сейчас в теме
(35)Значение должно быть строкой вида

e1cib/tempstorage/a8f1d1d3-f183-483d-a238-2c2d8f9cd74a?seanceId=02604bd5-2221-49c2-a778-983637c25475

У вас, вероятно, происходит переопределение значения АдресВХранилище по дороге до процедуры общего модуля, где вы пытаетесь по этому адресу получить данные из временного хранилища.
Прикрепленные файлы:
+
37. Intercititude 08.04.21 09:37 Сейчас в теме
(36) Даа, уже нагуглил.. Буду пробовать.

Ещё вопрос появился. Зачем на сервере выносить всё это ?

ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
ДвоичныеДанные = ПолучитьИЗВременногоХранилища(АдресВХранилище);

ДвоичныеДанные.Записать(ИмяВременногоФайла);

ПереместитьФайлы(ИмяВременногоФайла, "ПутьККоторомуЕстьДоступСервера1С" + "\ИмяКонечногоФайла" + ".Расширение");


Достаточно же на сервер поместить метод "ПереместитьФайл" по идее ?
+
38. nomad_irk 72 08.04.21 09:39 Сейчас в теме
(37)потому что у вас изначальные условия выбора файла пользователем.

если это условие больше не выполняется, а файл формируется где-то в &НаСервере, то да, хватит ПереместитьФайлы().
Intercititude; +1
39. Intercititude 08.04.21 09:41 Сейчас в теме
(38) Почему у меня метод "ПоместитьВоВременноеХранилище" возвращает тип хранилище значения а не строку не пойму...
Хотя в СП написано что должен строку возвращать вида 1ceib

upd:
разобрался, помещал в реквизитс типом хранилищезначения....
+
17. vadim.semyonov.rzn 07.04.21 17:10 Сейчас в теме
(7) Тогда придется передавать данные с клиента на сервер через временное хранилище, по другому не пролезет.
FatPanzer; user1058740; +2
19. Intercititude 07.04.21 17:11 Сейчас в теме
(17) Можно пример..
Сейчас копироватьфайл вынесено в общий модуль только с флажком "Сервер".
+
27. vadim.semyonov.rzn 07.04.21 17:29 Сейчас в теме
(19)
&НаКлиенте
Процедура ПереместитьФайл(Команда)     
    ОбработкаОкончанияПомещения = Новый ОписаниеОповещения
        ("ОбработчикОкончанияПеремещения", ЭтотОбъект);
    НачатьПомещениеФайла(ОбработкаОкончанияПомещения, , 
        "C:\Users\Public\Pictures\Sample Pictures\Lighthouse.jpg", Ложь, ЭтотОбъект.УникальныйИдентификатор);
КонецПроцедуры

&НаКлиенте
Процедура ОбработчикОкончанияПеремещения(Результат, Адрес, 
        ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
    Если Результат Тогда
        ЗаписатьПолученныйФайл(Адрес, ВыбранноеИмяФайла);
    Иначе
        Сообщить("Файл не был помещен.");
    КонецЕсли 
КонецПроцедуры

&НаСервере
Процедура ЗаписатьПолученныйФайл(Адрес, ВыбранноеИмяФайла)
	ИмяФайлаСостав = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ВыбранноеИмяФайла)
	ИмяФайла = ИмяФайлаСостав.Имя + ИмяФайлаСостав.Расширение;
	ПапкаНазначения = "<Папка назначения на сервере>";
	КопироватьФайл(Адрес, ПапкаНазначения + "\" + ИмяФайла);
КонецПроцедуры
Показать
+
8. nomad_irk 72 07.04.21 17:01 Сейчас в теме
(1)База клиент-серверная?
+
9. Intercititude 07.04.21 17:01 Сейчас в теме
(8)клиент сервер на 8.2. да
+
11. nomad_irk 72 07.04.21 17:02 Сейчас в теме
(9) В таком случае см. (10)
+
12. rusia 07.04.21 17:03 Сейчас в теме
(9)8.2 - это версия платформы. База файловая (лежит в папке на компьютере) или клиент-серверная (установлена на отдельном компьютере с СКЛ-сервером и сервером 1с)?
+
13. nomad_irk 72 07.04.21 17:04 Сейчас в теме
(9)Окошко по кнопочке "i в кружкЕ" покажите
+
22. rusia 07.04.21 17:16 Сейчас в теме
(1)а что за КопироватьФайлы()? Можно подробнее? Стандартный вроде как КопироватьФайл().
+
2. user1058740 07.04.21 16:57 Сейчас в теме
Сомневаюсь что проблема из-за пробела. Но раз ошибка возникает, то попробуйте выбрать файл интерактивно через ДиалогВыбораФайла
+
4. Intercititude 07.04.21 16:58 Сейчас в теме
(2) Так так и сделано.
Сперва выбираю файла через диалогвыборафайла.
А после уже копироватьфайл()
+
5. andreyR3 1 07.04.21 16:59 Сейчас в теме
(4)Обратные слэши не проверяли?
+
6. Intercititude 07.04.21 17:00 Сейчас в теме
(5)проверял, не работает.
+
14. andreyR3 1 07.04.21 17:06 Сейчас в теме
(6)Попробуйте так:

Откуда = """путь с пробелами"""
;
+
20. Intercititude 07.04.21 17:15 Сейчас в теме
(14) Тоже пробовал. Проблема описана в (17)
+
24. user1058740 07.04.21 17:22 Сейчас в теме
(4)Тогда вместо диалогвыборафайла следует использовать начатьпомещениефайланасервер, пример можно посмотреть тут https://infostart.ru/1c/articles/1270130/ и в обработке завершения перейти на серверную процедуру как указано в (21)
+
25. Intercititude 07.04.21 17:23 Сейчас в теме
(24) Правда у меня обычные формы
+
26. user1058740 07.04.21 17:26 Сейчас в теме
Тогда код из 21 то что на клиенте сразу после диалога выбора файла а то что на сервере в общий модуль
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот