Сдвигает текущую позицию потока на заданное количество байтов относительно начальной позиции. Если указано отрицательное смещение, позиция сдвигается в направлении к началу потока. Если изменение позиции недоступно (ДоступноИзменениеПозиции установлено в Ложь), будет сгенерировано исключение.
Синтаксис
Перейти(<Смещение>, <НачальнаяПозиция>)Полное описание, параметры и ограничения
ФайловыйПоток.Перейти (FileStream.Seek)
ФайловыйПоток (FileStream)
Перейти (Seek)
Доступен, начиная с версии 8.3.9.
Синтаксис:
Перейти(<Смещение>, <НачальнаяПозиция>)
Параметры:
<Смещение> (обязательный)
Тип: Число.
Количество байтов, на которое нужно передвинуть позицию в потоке.
<НачальнаяПозиция> (необязательный)
Тип: ПозицияВПотоке.
Начальная позиция, от которой отсчитывается смещение.
Возвращаемое значение:
Тип: Число.
Новая позиция в потоке.
Описание:
Сдвигает текущую позицию потока на заданное количество байтов относительно начальной позиции. Если указано отрицательное смещение, позиция сдвигается в направлении к началу потока.
Если изменение позиции недоступно (ДоступноИзменениеПозиции установлено в Ложь), будет сгенерировано исключение.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер, интеграция.
Примечание:
Если результирующая позиция меньше 0, будет сгенерировано исключение.
После записи в поток за пределами текущего размера, размер потока соответствующим образом увеличивается, а все байты после старого размера потока и до новой позиции остаются в неопределенном состоянии.
См. также:
Поток, метод НачатьПереход
Поток, метод ПерейтиАсинх
Использование в версии:
Доступен, начиная с версии 8.3.9.
Описание изменено в версии 8.3.18.
Методическая информация
Практические примеры
Временный поток: лимит памяти и чтение ABC (async)
Полностью заданный трёхбайтный опыт показывает отдельный порог памяти и размер буфера без пользовательского имени файла.
Где и как запускать
Полный модуль собственной управляемой формы, локальный клиент Windows.
Подготовка
Собственная учебная база 8.5.1.1343, тонкий или толстый клиент Windows с разрешённой локальной файловой системой. Создайте внешнюю обработку с управляемой формой, командой Выполнить и кнопкой; вставьте весь модуль одного урока.
Это клиентский модуль, не серверный и не веб-клиентский: используются локальные файлы и операции потока, доступные этому окружению. Не отключайте профиль безопасности рабочей базы ради урока.
Именованные уроки получают новое временное имя, резервируют его через СоздатьНовый и только после этого показывают методы, способные перезаписать собственный файл. Ни один путь не вводится пользователем.
Автоматический временный поток создаётся менеджером без заданного имени. Не обещаем физический файл, его расположение или отсутствие файла на диске по одному свойству потока.
Не закрывайте форму в середине асинхронной цепочки. После нормального завершения проверяйте сообщения очистки; при аварийном завершении клиента платформа может оставить временный файл до штатной уборки.
&НаКлиенте
Асинх Процедура Выполнить(Команда)
Поток = Неопределено;
ОшибкаОперации = "";
Попытка
Поток = Ждать ФайловыеПотоки.СоздатьВременныйФайлАсинх(2, 8192);
Сообщить(ТипЗнч(Поток) = Тип("ФайловыйПоток"));
Сообщить(Поток.ДоступноЧтение И Поток.ДоступнаЗапись);
Буфер = ПолучитьБуферДвоичныхДанныхИзСтроки("ABC", КодировкаТекста.UTF8, Ложь);
Поток.Записать(Буфер, 0, 3);
Сообщить(Поток.Размер() = 3);
Поток.Перейти(0, ПозицияВПотоке.Начало);
Чтение = Новый БуферДвоичныхДанных(3);
Сообщить(Поток.Прочитать(Чтение, 0, 3) = 3);
Сообщить(Чтение.Получить(0) = 65 И Чтение.Получить(1) = 66 И Чтение.Получить(2) = 67);
Исключение
ОшибкаОперации = ОписаниеОшибки();
КонецПопытки;
ОшибкаЗакрытия = ЗакрытьПотокУрока(Поток);
Если Не ПустаяСтрока(ОшибкаОперации) Или Не ПустаяСтрока(ОшибкаЗакрытия) Тогда
ВызватьИсключение ОшибкаОперации + " " + ОшибкаЗакрытия;
КонецЕсли;
Сообщить("Собственный временный поток закрыт");
КонецПроцедуры
&НаКлиенте
Функция ЗакрытьПотокУрока(Поток)
Если Поток = Неопределено Тогда
Возврат "";
КонецЕсли;
Попытка
Поток.Закрыть();
Возврат "";
Исключение
Возврат "Не удалось закрыть собственный поток: " + ОписаниеОшибки();
КонецПопытки;
КонецФункцииРазбор по шагам
Создаём поток с лимитом памяти 2 байта и буфером 8192 байта. Лимит и размер буфера — разные параметры, не мегабайты.
Менеджер самостоятельно обслуживает переход на диск при превышении лимита. Записываем три байта ABC, то есть больше выбранного порога.
Имя физического файла и тип внутреннего хранилища не угадываем. Проверяем только документированный ФайловыйПоток и доступные чтение/запись.
Возвращаем позицию к началу перед чтением; иначе после записи поток находится на конце и чтение вернёт ноль.
Закрываем полученный поток при успехе и при исключении; ошибка закрытия не скрывается. Физическое удаление временного файла этим выводом не проверяется.
СоздатьВременныйФайлАсинх возвращает Обещание; Ждать получает поток. Короткие трёхбайтные операции далее синхронные и доступны выбранному локальному клиенту.
Как проверить результат
Пять сравнений ожидаются Истина: фактический тип, обе возможности, размер 3, прочитано 3, байты 65/66/67.
После успешного закрытия показано сообщение о закрытом потоке. Оно не утверждает проверенное физическое удаление файла с диска.
Ожидаемый результат
Создан, заполнен, прочитан и закрыт собственный временный поток с маленьким порогом памяти.
На что обратить внимание
Лимит памяти 2 здесь выбран только для трёхбайтного опыта; в реальной задаче его определяют по ожидаемым размерам и нагрузке.
Размер буфера не ограничивает итоговый размер данных.
Не выводить имя потока как доказательство нахождения данных только в памяти.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Временный поток: лимит памяти и чтение ABC (callback)
Полностью заданный трёхбайтный опыт показывает отдельный порог памяти и размер буфера без пользовательского имени файла.
Где и как запускать
Полный модуль собственной управляемой формы, локальный клиент Windows.
Подготовка
Собственная учебная база 8.5.1.1343, тонкий или толстый клиент Windows с разрешённой локальной файловой системой. Создайте внешнюю обработку с управляемой формой, командой Выполнить и кнопкой; вставьте весь модуль одного урока.
Это клиентский модуль, не серверный и не веб-клиентский: используются локальные файлы и операции потока, доступные этому окружению. Не отключайте профиль безопасности рабочей базы ради урока.
Именованные уроки получают новое временное имя, резервируют его через СоздатьНовый и только после этого показывают методы, способные перезаписать собственный файл. Ни один путь не вводится пользователем.
Автоматический временный поток создаётся менеджером без заданного имени. Не обещаем физический файл, его расположение или отсутствие файла на диске по одному свойству потока.
Не закрывайте форму в середине асинхронной цепочки. После нормального завершения проверяйте сообщения очистки; при аварийном завершении клиента платформа может оставить временный файл до штатной уборки.
&НаКлиенте
Перем ВыполняетсяВременныйПоток;
&НаКлиенте
Процедура Выполнить(Команда)
Если ВыполняетсяВременныйПоток = Истина Тогда
ВызватьИсключение "Дождитесь завершения временного потока";
КонецЕсли;
Состояние = Новый Структура("Поток", Неопределено);
ВыполняетсяВременныйПоток = Истина;
Попытка
Оповещение = Новый ОписаниеОповещения("ПослеСозданияВременногоПотока", ЭтаФорма, Состояние, "ОшибкаВременногоПотока", ЭтаФорма);
ФайловыеПотоки.НачатьСозданиеВременногоФайла(Оповещение, 2, 8192);
Исключение
ВыполняетсяВременныйПоток = Ложь;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ПослеСозданияВременногоПотока(Поток, Состояние) Экспорт
Состояние.Поток = Поток;
ОшибкаОперации = "";
Попытка
Сообщить(ТипЗнч(Поток) = Тип("ФайловыйПоток"));
Сообщить(Поток.ДоступноЧтение И Поток.ДоступнаЗапись);
Буфер = ПолучитьБуферДвоичныхДанныхИзСтроки("ABC", КодировкаТекста.UTF8, Ложь);
Поток.Записать(Буфер, 0, 3);
Сообщить(Поток.Размер() = 3);
Поток.Перейти(0, ПозицияВПотоке.Начало);
Чтение = Новый БуферДвоичныхДанных(3);
Сообщить(Поток.Прочитать(Чтение, 0, 3) = 3);
Сообщить(Чтение.Получить(0) = 65 И Чтение.Получить(1) = 66 И Чтение.Получить(2) = 67);
Исключение
ОшибкаОперации = ОписаниеОшибки();
КонецПопытки;
ОшибкаЗакрытия = ЗакрытьПотокУрока(Поток);
ВыполняетсяВременныйПоток = Ложь;
Если Не ПустаяСтрока(ОшибкаОперации) Или Не ПустаяСтрока(ОшибкаЗакрытия) Тогда
ВызватьИсключение ОшибкаОперации + " " + ОшибкаЗакрытия;
КонецЕсли;
Сообщить("Собственный временный поток закрыт");
КонецПроцедуры
&НаКлиенте
Процедура ОшибкаВременногоПотока(Ошибка, СтандартнаяОбработка, Состояние) Экспорт
ВыполняетсяВременныйПоток = Ложь;
ОшибкаЗакрытия = ЗакрытьПотокУрока(Состояние.Поток);
Если Не ПустаяСтрока(ОшибкаЗакрытия) Тогда
Сообщить(ОшибкаЗакрытия);
КонецЕсли;
СтандартнаяОбработка = Истина;
КонецПроцедуры
&НаКлиенте
Функция ЗакрытьПотокУрока(Поток)
Если Поток = Неопределено Тогда
Возврат "";
КонецЕсли;
Попытка
Поток.Закрыть();
Возврат "";
Исключение
Возврат "Не удалось закрыть собственный поток: " + ОписаниеОшибки();
КонецПопытки;
КонецФункцииРазбор по шагам
Создаём поток с лимитом памяти 2 байта и буфером 8192 байта. Лимит и размер буфера — разные параметры, не мегабайты.
Менеджер самостоятельно обслуживает переход на диск при превышении лимита. Записываем три байта ABC, то есть больше выбранного порога.
Имя физического файла и тип внутреннего хранилища не угадываем. Проверяем только документированный ФайловыйПоток и доступные чтение/запись.
Возвращаем позицию к началу перед чтением; иначе после записи поток находится на конце и чтение вернёт ноль.
Закрываем полученный поток при успехе и при исключении; ошибка закрытия не скрывается. Физическое удаление временного файла этим выводом не проверяется.
НачатьСозданиеВременногоФайла передаёт в экспортный callback два аргумента: Поток и Состояние. Флаг формы защищает только этот собственный запуск, а не все фоновые операции клиента.
Как проверить результат
Пять сравнений ожидаются Истина: фактический тип, обе возможности, размер 3, прочитано 3, байты 65/66/67.
После успешного закрытия показано сообщение о закрытом потоке. Оно не утверждает проверенное физическое удаление файла с диска.
Ожидаемый результат
Создан, заполнен, прочитан и закрыт собственный временный поток с маленьким порогом памяти.
На что обратить внимание
Лимит памяти 2 здесь выбран только для трёхбайтного опыта; в реальной задаче его определяют по ожидаемым размерам и нагрузке.
Размер буфера не ограничивает итоговый размер данных.
Не выводить имя потока как доказательство нахождения данных только в памяти.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.