Имя: Пароль:
1C
1С v8
Запись текста в ПотокВПамяти
,
0 Oldman06
 
30.09.20
11:59
Приветствую. Пытаюсь избавиться от использования временных файлов.
С временным файлом:

ВременныйФайл = ПолучитьИмяВременногоФайла();
Запись = Новый ЗаписьТекста(ВременныйФайл, "UTF-8");
Запись.Записать("" + Настройки.ИдентификаторКлиента + ":" + Настройки.СекретнаяСтрока);
Запись.Закрыть();
ДД = Новый ДвоичныеДанные(ВременныйФайл);

получаю одни двоичные данные (правильные).
С потоком в памяти:

ПотокДанных = Новый ПотокВПамяти();
ЗаписьТекста = Новый ЗаписьТекста(ПотокДанных, "UTF-8");
ЗаписьТекста.Записать("" + Настройки.ИдентификаторКлиента + ":" + Настройки.СекретнаяСтрока);
ЗаписьТекста.Закрыть();
ДД = ПотокДанных.ЗакрытьИПолучитьДвоичныеДанные();

получаю совершенно другие двоичные данные, да еще и короче на 3 байта.
Я что-то не знаю о потоках в 1С? Никогда с ними не работал до этого.
1 Franchiser
 
гуру
30.09.20
12:00
(0) а почему они должны совпадать?
2 Oldman06
 
30.09.20
12:02
(1) А почему нет?

Посмотрел внимательней. В двоичных данных полученных через поток отсутствуют первые 3 баата (EF BB BF)
3 Oldman06
 
30.09.20
12:03
В остальном двоичные данные совпадают.
4 Franchiser
 
гуру
30.09.20
12:04
Обычно в файлах если смотреть hex пишется в начало некая информация о формате - подпись : txt, jpg и т.д.
А поток может это не писать.
5 mikecool
 
30.09.20
12:05
(2) запиши в файл и прочитай из него ДД, будут совпадать?
6 fisher
 
30.09.20
12:05
(2) Это BOM UTF-8
7 Franchiser
 
гуру
30.09.20
12:05
8 Chameleon1980
 
30.09.20
12:06
(4) с куали там что-то пишется в начале? там пишется только то, что ты пишешь
9 Oldman06
 
30.09.20
12:07
Все, спасибо. Уже разобрался.
10 Franchiser
 
гуру
30.09.20
12:08
(8) если у тебя есть файл-картинка, и ты изменил ему удалил расширение, то есть программы которые могут все-равно понять что это картинка, или найти через hex определенную подпись.
11 trad
 
30.09.20
12:08
(8) как бы файл в юникоде должен в начале содержать BOM
Для утф8 - это (7)
12 fisher
 
30.09.20
12:11
(11) Не "должен" - "может".
13 fisher
 
30.09.20
12:15
(9) А как разобрался, кстати? Вообще странно, что по-разному пишет. И без BOM, ЕМНИП, 1С нельзя заставить писать. Только выкусывать.
14 Franchiser
 
гуру
30.09.20
12:16
(13) вероятно не указал где-то кодировку
15 fisher
 
30.09.20
12:19
Ыыыы! В конструкторе ЗаписьТекста() на основании потока можно управлять BOM, а в файловом - нельзя :)
16 fisher
 
30.09.20
12:20
И просто по дефолту в память без BOM пишется. РТФМ, короче.
17 Oldman06
 
30.09.20
12:21
(13) Двоичные данные отличаются только наличием 3 байтов (EF BB BF) в случае с временным файлом, в остальном идентичны. Просто я сразу не заметил, так как сверял с начала. Вероятно это BOM. В любом случае, далее он не нужен и отрезался. Все это для формирования тела POST-запроса.
18 trad
 
30.09.20
12:22
(15) ну вот видимо в одинес считают что не "может", а "должен"
))
19 Franchiser
 
гуру
30.09.20
12:23
при желании можно BOM отдельно дописать
20 fisher
 
30.09.20
12:27
(18)(19) Ну вот как раз при записи в память пятым параметром конструктора можно явно указать - писать BOM или нет.