Поток.КопироватьВ

Методы · CopyTo

Копирует данные из текущего потока в другой поток. Дополнительно можно установить количество байтов, которые будут скопированы.

Синтаксис

КопироватьВ(<ЦелевойПоток>, <Количество>)
Полное описание, параметры и ограничения

Поток.КопироватьВ (Stream.CopyTo)

Поток (Stream)

КопироватьВ (CopyTo)

Доступен, начиная с версии 8.3.9.

Синтаксис:
КопироватьВ(<ЦелевойПоток>, <Количество>)
Параметры:

<ЦелевойПоток> (обязательный)
Тип: Поток.
Поток, в который будет выполняться копирование.

<Количество> (необязательный)
Тип: Число.
Количество байтов, которые требуется скопировать в целевой поток. Если не задано, то будут скопированы все данные до конца текущего потока.
Возвращаемое значение:
Фактическое количество скопированных байтов.
Описание:

Копирует данные из текущего потока в другой поток.
Дополнительно можно установить количество байтов, которые будут скопированы.

Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер, интеграция.

См. также:
Поток, метод КопироватьВАсинх
Поток, метод НачатьКопированиеВ

Использование в версии:

Доступен, начиная с версии 8.3.9.

Описание изменено в версии 8.3.18.

Методическая информация

Практические примеры

Открыть собственные двоичные данные как поток чтения

ОткрытьПотокДляЧтения возвращает Поток с позицией в начале данных. Размер шесть байтов не означает, что курсор автоматически возвращается в начало перед копированием.

Где и как запускать

Серверная процедура учебной базы; собственные двоичные данные в памяти, без файлов.

Подготовка

  1. Используйте отдельную учебную базу. Фрагмент без директив вставьте в тело серверной процедуры ВыполнитьПример() Экспорт общего модуля УчебныеЗадачи.

  2. Все исходные байты создаются самим примером в памяти. Файлы, сеть, справочники и документы не нужны.

  3. Запускайте задачи отдельно. После закрытия ЧтениеДанных/ЗаписьДанных не используйте этот экземпляр повторно.

Данные = ПолучитьДвоичныеДанныеИзСтроки("ABC123", КодировкаТекста.UTF8, Ложь);
Поток = Данные.ОткрытьПотокДляЧтения();
Вид = Неопределено;
Копия = Неопределено;
Попытка
    Сообщить(Поток.ДоступноЧтение);
    Сообщить(Не Поток.ДоступнаЗапись);
    Сообщить(Поток.ДоступноИзменениеПозиции);
    Сообщить(Поток.ТекущаяПозиция() = 0);
    Сообщить(Поток.Размер() = 6);
    Первые = Новый БуферДвоичныхДанных(2);
    Сообщить(Поток.Прочитать(Первые, 0, 2) = 2);
    Сообщить(ПолучитьСтрокуИзБуфераДвоичныхДанных(Первые, КодировкаТекста.UTF8) = "AB");
    Копия = Новый ПотокВПамяти;
    Сообщить(Поток.КопироватьВ(Копия) = 4);
    Хвост = Копия.ЗакрытьИПолучитьДвоичныеДанные();
    Копия = Неопределено;
    Сообщить(ПолучитьСтрокуИзДвоичныхДанных(Хвост, КодировкаТекста.UTF8) = "C123");
    Сообщить(Поток.ТекущаяПозиция() = 6);
    Сообщить(Поток.Перейти(0, ПозицияВПотоке.Начало) = 0);
Исключение
    Если Вид <> Неопределено Тогда
        Вид.Закрыть();
    КонецЕсли;
    Если Копия <> Неопределено Тогда
        Копия.Закрыть();
    КонецЕсли;
    Поток.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Если Вид <> Неопределено Тогда
    Вид.Закрыть();
КонецЕсли;
Если Копия <> Неопределено Тогда
    Копия.Закрыть();
КонецЕсли;
Поток.Закрыть();

Разбор по шагам

  1. Кодирование ASCII без BOM создаёт неизменяемые шесть байтов в памяти.

  2. Проверяем доступность чтения/изменения позиции и отсутствие доступа к записи.

  3. Прочитать забирает AB, КопироватьВ без количества копирует только оставшийся C123.

  4. После копирования курсор 6; возвращаем его в начало отдельным Перейти. Оба потока закрываются.

Как проверить результат

  1. Одиннадцать сравнений Истина; прочитано 2, скопировано 4.

  2. На диске не появился файл, исходные ДвоичныеДанные по-прежнему ABC123.

Ожидаемый результат

Разобран реальный базовый Поток, полученный из своих ДвоичныеДанные.

На что обратить внимание

  1. КопироватьВ не возвращает ДвоичныеДанные: результат — количество скопированных байтов.

  2. Для кириллицы два байта не обязательно равны двум символам. Здесь намеренно ASCII.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.