Имя: Пароль:
1C
1С v8
Работа с двоичными данными на платформе 8.2
0 PaulisArt
 
22.07.25
16:05
Прошу помощи, не могу разделить файл на несколько кусков. Это требуется для передачи файла по API неcколькими частями. Потоки и БуферДвоичныхДанных на этой платформе не работают. Чтение файла кусками тоже не поддерживается. Можно использовать РазделитьФайл(), но это сильная нагрузка на диск. Предполагаю, это можно сделать внешними компонентами, кто знает подскажите, какими.
1 Волшебник
 
22.07.25
16:18
Используйте РазделитьФайл() и не парьтесь о дисках
2 NorthWind
 
22.07.25
16:34
(0) если под виндой, то можно использовать ADO.Stream. Если под линуксом, то он умеет это из коробки UNIXовыми утилитами, например, split.
3 arsik
 
гуру
22.07.25
16:56
(0) Ты же наверно в Base64 отдаешь. Вот ее и поруби :)
4 PaulisArt
 
22.07.25
17:03
(2) Спасибо. То что надо.
5 PaulisArt
 
22.07.25
17:03
(3) Если бы. Там бинарные данные в теле запроса.
6 Волшебник
 
22.07.25
17:17
Я не верю, что метод РазделитьФайл() создаёт такую сильную нагрузку на диск, что его нельзя использовать
7 PaulisArt
 
22.07.25
17:43
ADO.Stream при чтении части создает объект COMSafeArray который можно только записать на диск (((.
Вариантов похоже больше нет. Выходит единственный способ - РазделитьФайл(). Буду тестить.
8 PaulisArt
 
22.07.25
17:47
(6) Там на одном сервере все. Диск и так нагружен. Теперь придется делить файлы на куски по 500кб и отправлять. Там 25 человек, постоянно отправляют доки в диадок по 3-5 мб. Буду смотреть как скажется на быстродействии, надеюсь что Волшебник прав.
9 Волшебник
 
22.07.25
18:12
(8) Это не Ваша головная боль, а админов
10 Волшебник
 
22.07.25
18:14
Поставьте диск SSD, он в 10 раз быстрее HDD
11 PaulisArt
 
22.07.25
18:17
Там полка SSD, но мое мнение, что нужно стараться использовать для этого память, а не диски. Временные файлы зло ))).
12 Волшебник
 
22.07.25
18:23
(11) Операционная система без Вас справится. Занимайтесь своим прикладным программированием и не лезьте в низкоуровневые вопросы
13 Garykom
 
гуру
22.07.25
18:52
(0) А вы точно юзаете платформу 8.2?
Или все же более свежую 8.3 в режиме совместимости?
14 PaulisArt
 
22.07.25
18:59
(13) 8.3 в режиме совместимости
15 Garykom
 
гуру
22.07.25
20:41
(14) Вот я угадал

"25 человек, постоянно отправляют доки в диадок по 3-5 мб" - они это из древней конфы на 8.2 прямо отправляют?
Не пора ли поднять для них "микросервис", наваянный на 1С 8.3?
Чтобы заодно там и ключики в одном месте лежали
И можно было безболезненно сменить на лету диадок на сбис или любой другой
Не трогая рабочую конфу древнюю
16 novichok79
 
22.07.25
20:46
а что плохого во временных файлах? лучше чтобы ОЗУ закончилось?
17 Garykom
 
гуру
22.07.25
21:01
(16) Плохо то что если канал многогигабит
То быстрей поделить файлик в оперативке (предварительно один раз считав с диска) и тут же отправить по инету
Чем еще дополнительно долго грузить дисковую (чтение, запись на куски, снова чтение кусков), от многоюзеров

Как это ни странно но нынче допустимые каналы инета быстрей чем даже SSD обычные SATA/SAS
Про древние HDD и речи нет, там сетевуха быстрей сильно

Но если канал плохой - тут надо изобретать нечто аля (15) чтобы все в одну очередь делилось и улетало с максимальной производительностью, не сильно нагружая ресурсы
18 Волшебник
 
22.07.25
22:06
(17) Не вмешивайтесь в управление файлами и памятью ОС. Сохраняйте во временный файл, делите файл на куски. ОС всё сделает в памяти
19 Garykom
 
гуру
22.07.25
22:46
(18) Эмм
Кэширование это конечно хорошо, но не панацея
И загрузку диска на запись никак не убирает же
20 Dedal
 
22.07.25
22:46
RAM диск что не предложили? =)