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

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

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

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


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

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

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

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

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


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


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

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

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)