Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Прочитать файл (двоичные данные) как строку
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
Petre
Как прочитать двоичное содержимое файла в строку (аналог file_get_contents() в php)?
Vofka
Может быть ЗначениеВСтрокуВнутр() ?
Petre
Vofka @ Сегодня, 13:39 необходимо зарегистрироваться для просмотра ссылки,
Не подойдет. Надо для использования в HTTP-запросе. Ключевое требование: не кодировать в base64.
Vofka
А двоичные данные в том виде, как они есть в 1С пробовали передавать?
Petre
Может натолкнет на мысль. Вот описание: необходимо зарегистрироваться для просмотра ссылки. Файл необходимо передавать строкой прямо в url-е:
необходимо зарегистрироваться для просмотра ссылки
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
А если отак:

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


?
Petre
Vofka @ Вчера, 16:08 необходимо зарегистрироваться для просмотра ссылки,
ТекстовыйДокумент читает только первые читабельные символы (может проблема с платформой, а может используется какое-то преобразование). Пробовал на jpeg-файле.
ЧтениеТекста - уже лучше, но надо поиграться с символами переноса строк.
Не думал, что вроде простая вещь вызовет столько проблем...
TipsyKID
Потестил, вроде все норм с ПолучитьТекст() :
Процедура КнопкаВыполнитьНажатие(Кнопка)
    МассивБайт = ПолучитьМассивБайтИзФайла(<ПутьКФайлу>);
    ВывестиМассивВВидеТаблицы(МассивБайт,16);
КонецПроцедуры

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


Функция ПолучитьМассивБайтИзФайла(ПутьКФайлу)
    
    ТекстовыйДокумент = Новый ТекстовыйДокумент;
    ТекстовыйДокумент.Прочитать(ПутьКФайлу, "ISO-8859-1", "");
    ТекстФайла = ТекстовыйДокумент.ПолучитьТекст();
    
    МассивБайт = Новый Массив;
    
    ДлинаТекста = СтрДлина(ТекстФайла);
    Для Сч = 1 По ДлинаТекста Цикл
        ТекСимвол = Сред(ТекстФайла, Сч, 1);
        МассивБайт.Добавить(КодСимвола(ТекСимвол));
    КонецЦикла;
    
    Возврат МассивБайт;
    
КонецФункции
Petre
TipsyKID @ Сегодня, 15:22 необходимо зарегистрироваться для просмотра ссылки,
Какой файл при этом читался?
TipsyKID
png и тестил на zip
Petre
Надо проверить. Еще и на разных релизах попробую...
TipsyKID
Я использовал релиз 8.2.19.121
Petre
У меня - 8.3.7
Vofka
Я на 8.2.19.130 смотрел.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.