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

1. 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 55 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 55 07.04.21 17:02 Сейчас в теме
(7)Так сервер ничего не знает про указанный путь, у него может не быть вообще диска C

Вам нужен общий сетевой ресурс, к которому у сервера 1С есть доступ.
Общий сетевой ресурс имеет адрес вида \\ИмяМашины\ИмяРесурсаНаМашине
15. Intercititude 07.04.21 17:08 Сейчас в теме
(10) И как быть?
Подразумевается что люди буду копировать со своего компьютера файлы.
16. nomad_irk 55 07.04.21 17:08 Сейчас в теме
(15)Люди будут копировать куда? Для чего в этом случае использовать 1С в качестве файлового менеджера?
Можно и в проводнике это сделать, разграничив правами: можно записывать, но нельзя читать.
18. Intercititude 07.04.21 17:10 Сейчас в теме
(16) В серверную папку к которой у них нету доступа.
21. nomad_irk 55 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 55 07.04.21 17:41 Сейчас в теме
(28)не делать из картинки ХранилищеЗначения, а использовать сам файл картинки для создания ДвоичныеДанные.

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


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

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

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

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

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


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


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

И выходит ошибка "Неправильный путь к файлу 'ХранилищеЗначения'"
36. nomad_irk 55 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 55 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 55 07.04.21 17:01 Сейчас в теме
(1)База клиент-серверная?
9. Intercititude 07.04.21 17:01 Сейчас в теме
11. nomad_irk 55 07.04.21 17:02 Сейчас в теме
12. rusia 07.04.21 17:03 Сейчас в теме
(9)8.2 - это версия платформы. База файловая (лежит в папке на компьютере) или клиент-серверная (установлена на отдельном компьютере с СКЛ-сервером и сервером 1с)?
13. nomad_irk 55 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 Сейчас в теме
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 то что на клиенте сразу после диалога выбора файла а то что на сервере в общий модуль
Оставьте свое сообщение
Вопросы с вознаграждением