Версия для печати темы (https://pro1c.org.ua/index.php?s=0e599a39eee72e820abeead00e09e971&showtopic=28891)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Прочитать файл (двоичные данные) как строку

Автор: Petre 24.03.16, 13:13

Как прочитать двоичное содержимое файла в строку (аналог file_get_contents() в php)?

Автор: Vofka 24.03.16, 13:39

Может быть ЗначениеВСтрокуВнутр() ?

Автор: Petre 24.03.16, 13:59

Vofka @ Сегодня, 13:39 *,
Не подойдет. Надо для использования в HTTP-запросе. Ключевое требование: не кодировать в base64.

Автор: Vofka 24.03.16, 14:36

А двоичные данные в том виде, как они есть в 1С пробовали передавать?

Автор: Petre 24.03.16, 15:32

Может натолкнет на мысль. Вот описание: http://pro1c.org.ua/redirect.php?https://support.unisender.com/index.php?/Knowledgebase/Article/View/62/0/createemailmessage---sozdt-e-mail-dlja-mssovojj-rssylki. Файл необходимо передавать строкой прямо в url-е:
Аргумент attachments

attachments:

Ассоциативный массив файлов-вложений. В качестве ключа указывается имя файла, в качестве значения - бинарное содержимое файла (base64 использовать нельзя!), например:

attachments[quotes.txt]=text%20file%content

Используя скрипт PHP, содержимое файла можно получить через функцию file_get_contents. Например: $api_query = array(....,"attachments[test.pdf]"=>file_get_contents('test.pdf'),...);

В сообщение вложения будут добавлены в том же порядке, в котором перечислены. Можно вставлять в текст письма inline-картинки, добавляя их как файлы-вложения и ссылаясь на них в HTML так: img src="3_name.jpg" . Вместо числа три надо подставить порядковый номер вложения, а вместо name.jpg - имя вложения.

Файл аттача должен быть только латиницей с расширением.

Автор: Vofka 24.03.16, 16:08

А если отак:

ТД = Новый ТекстовыйДокумент();
ТД.Прочитать(ИмяФайла, КодировкаТекста.UTF8, Символы.ПС); // ИмяФайла - не обязательно текстовый файл
ФайлВВидеСтроки = ТД.ПолучитьТекст();


?

Автор: Petre 25.03.16, 10:33

Vofka @ Вчера, 16:08 *,
ТекстовыйДокумент читает только первые читабельные символы (может проблема с платформой, а может используется какое-то преобразование). Пробовал на jpeg-файле.
ЧтениеТекста - уже лучше, но надо поиграться с символами переноса строк.
Не думал, что вроде простая вещь вызовет столько проблем...

Автор: TipsyKID 25.03.16, 15:22

Потестил, вроде все норм с ПолучитьТекст() :

Процедура КнопкаВыполнитьНажатие(Кнопка)
    МассивБайт = ПолучитьМассивБайтИзФайла(<ПутьКФайлу>);
    ВывестиМассивВВидеТаблицы(МассивБайт,16);
КонецПроцедуры

Процедура ВывестиМассивВВидеТаблицы(м, квоВСтроке,HEX = Истина)
    
    //: м = Новый Массив;
    СтрокаШаблон = "    ";
    КоличествоЭлементов = м.Количество();
    КвоСтрок = Цел(КоличествоЭлементов/ квоВСтроке);
    Остаток  = КоличествоЭлементов - КвоСтрок * квоВСтроке;
    //Выводим полноценные строки
    Для инд_строка = 0 По КвоСтрок - 1 Цикл
        СтрокаСообщения = "";
        Для инд_колонка = 0 По квоВСтроке - 1 Цикл
            ИндМассива = инд_строка * квоВСтроке + инд_колонка;
            Если HEX Тогда
                СтрокаСообщения = СтрокаСообщения + Прав(СтрокаШаблон + DecToHex(м[ИндМассива]),4);
            Иначе
                СтрокаСообщения = СтрокаСообщения + Прав(СтрокаШаблон + м[ИндМассива],4);
            КонецЕсли;
        КонецЦикла;
        Сообщить(СтрокаСообщения);
    КонецЦикла;
    
    //Выводи остаток
    СтрокаСообщения = "";
    Для инд_колонка = 0 По Остаток - 1 Цикл
        ИндМассива = КвоСтрок * квоВСтроке + инд_колонка;
        СтрокаСообщения = СтрокаСообщения + Прав(СтрокаШаблон + DecToHex(м[ИндМассива]),4);
    КонецЦикла;
    Если HEX Тогда
        СтрокаСообщения = СтрокаСообщения + Прав(СтрокаШаблон + DecToHex(м[ИндМассива]),4);
    Иначе
        СтрокаСообщения = СтрокаСообщения + Прав(СтрокаШаблон + м[ИндМассива],4);
    КонецЕсли;
КонецПроцедуры


Функция ПолучитьМассивБайтИзФайла(ПутьКФайлу)
    
    ТекстовыйДокумент = Новый ТекстовыйДокумент;
    ТекстовыйДокумент.Прочитать(ПутьКФайлу, "ISO-8859-1", "");
    ТекстФайла = ТекстовыйДокумент.ПолучитьТекст();
    
    МассивБайт = Новый Массив;
    
    ДлинаТекста = СтрДлина(ТекстФайла);
    Для Сч = 1 По ДлинаТекста Цикл
        ТекСимвол = Сред(ТекстФайла, Сч, 1);
        МассивБайт.Добавить(КодСимвола(ТекСимвол));
    КонецЦикла;
    
    Возврат МассивБайт;
    
КонецФункции

Автор: Petre 25.03.16, 15:25

TipsyKID @ Сегодня, 15:22 *,
Какой файл при этом читался?

Автор: TipsyKID 25.03.16, 15:26

png и тестил на zip

Автор: Petre 25.03.16, 15:28

Надо проверить. Еще и на разных релизах попробую...

Автор: TipsyKID 25.03.16, 15:32

Я использовал релиз 8.2.19.121

Автор: Petre 25.03.16, 15:57

У меня - 8.3.7

Автор: Vofka 25.03.16, 17:21

Я на 8.2.19.130 смотрел.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua