МенеджерФайловыхПотоков.СоздатьВременныйФайл

Методы · CreateTempFile

Создает временный файл и открывает его в монопольном режиме с возможностью чтения и записи. Дополнительно можно установить лимит в байтах, при превышении которого будет создан файл на диске. Пока размер файла не превышает данного лимита - вся работа ведётся в памяти.

Синтаксис

СоздатьВременныйФайл(<ЛимитПамяти>, <РазмерБуфера>)
Полное описание, параметры и ограничения

МенеджерФайловыхПотоков.СоздатьВременныйФайл (FileStreamsManager.CreateTempFile)

МенеджерФайловыхПотоков (FileStreamsManager)

СоздатьВременныйФайл (CreateTempFile)

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

Синтаксис:
СоздатьВременныйФайл(<ЛимитПамяти>, <РазмерБуфера>)
Параметры:

<ЛимитПамяти> (необязательный)
Тип: Число.
Максимальный объем памяти (в байтах), при превышении которого будет создан файл на диске.
Значение по умолчанию: 65535.

<РазмерБуфера> (необязательный)
Тип: Число.
Размер буфера для операций с файлом (в байтах).
Значение по умолчанию: 8192.
Возвращаемое значение:
Тип: ФайловыйПоток.

Описание:

Создает временный файл и открывает его в монопольном режиме с возможностью чтения и записи. Дополнительно можно установить лимит в байтах, при превышении которого будет создан файл на диске. Пока размер файла не превышает данного лимита - вся работа ведётся в памяти.

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

Тонкий клиент, сервер, толстый клиент, внешнее соединение.

Примечание:
Данный метод рекомендуется использовать в тех случаях, когда требуется работать с данными заранее неизвестного размера, поскольку в большинстве случаев этот размер ограничен. В таком случае возможно обеспечить, чтобы большую часть времени работа выполнялась в памяти и при этом предотвратить слишком высокое потребление памяти в случае если размер данных превысит ожидаемый.
См. также:
МенеджерФайловыхПотоков, метод НачатьСозданиеВременногоФайла
МенеджерФайловыхПотоков, метод СоздатьВременныйФайлАсинх

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

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

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

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

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

Временный поток: лимит памяти и чтение ABC (sync)

Полностью заданный трёхбайтный опыт показывает отдельный порог памяти и размер буфера без пользовательского имени файла.

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

Полный модуль собственной управляемой формы, локальный клиент Windows.

Подготовка

  1. Собственная учебная база 8.5.1.1343, тонкий или толстый клиент Windows с разрешённой локальной файловой системой. Создайте внешнюю обработку с управляемой формой, командой Выполнить и кнопкой; вставьте весь модуль одного урока.

  2. Это клиентский модуль, не серверный и не веб-клиентский: используются локальные файлы и операции потока, доступные этому окружению. Не отключайте профиль безопасности рабочей базы ради урока.

  3. Именованные уроки получают новое временное имя, резервируют его через СоздатьНовый и только после этого показывают методы, способные перезаписать собственный файл. Ни один путь не вводится пользователем.

  4. Автоматический временный поток создаётся менеджером без заданного имени. Не обещаем физический файл, его расположение или отсутствие файла на диске по одному свойству потока.

  5. Не закрывайте форму в середине асинхронной цепочки. После нормального завершения проверяйте сообщения очистки; при аварийном завершении клиента платформа может оставить временный файл до штатной уборки.

&НаКлиенте
Процедура Выполнить(Команда)
    Поток = Неопределено;
    ОшибкаОперации = "";
    Попытка
        Поток = ФайловыеПотоки.СоздатьВременныйФайл(2, 8192);
        Сообщить(ТипЗнч(Поток) = Тип("ФайловыйПоток"));
        Сообщить(Поток.ДоступноЧтение И Поток.ДоступнаЗапись);
        Буфер = ПолучитьБуферДвоичныхДанныхИзСтроки("ABC", КодировкаТекста.UTF8, Ложь);
        Поток.Записать(Буфер, 0, 3);
        Сообщить(Поток.Размер() = 3);
        Поток.Перейти(0, ПозицияВПотоке.Начало);
        Чтение = Новый БуферДвоичныхДанных(3);
        Сообщить(Поток.Прочитать(Чтение, 0, 3) = 3);
        Сообщить(Чтение.Получить(0) = 65 И Чтение.Получить(1) = 66 И Чтение.Получить(2) = 67);
    Исключение
        ОшибкаОперации = ОписаниеОшибки();
    КонецПопытки;
    ОшибкаЗакрытия = ЗакрытьПотокУрока(Поток);
    Если Не ПустаяСтрока(ОшибкаОперации) Или Не ПустаяСтрока(ОшибкаЗакрытия) Тогда
        ВызватьИсключение ОшибкаОперации + " " + ОшибкаЗакрытия;
    КонецЕсли;
    Сообщить("Собственный временный поток закрыт");
КонецПроцедуры

&НаКлиенте
Функция ЗакрытьПотокУрока(Поток)
    Если Поток = Неопределено Тогда
        Возврат "";
    КонецЕсли;
    Попытка
        Поток.Закрыть();
        Возврат "";
    Исключение
        Возврат "Не удалось закрыть собственный поток: " + ОписаниеОшибки();
    КонецПопытки;
КонецФункции

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

  1. Создаём поток с лимитом памяти 2 байта и буфером 8192 байта. Лимит и размер буфера — разные параметры, не мегабайты.

  2. Менеджер самостоятельно обслуживает переход на диск при превышении лимита. Записываем три байта ABC, то есть больше выбранного порога.

  3. Имя физического файла и тип внутреннего хранилища не угадываем. Проверяем только документированный ФайловыйПоток и доступные чтение/запись.

  4. Возвращаем позицию к началу перед чтением; иначе после записи поток находится на конце и чтение вернёт ноль.

  5. Закрываем полученный поток при успехе и при исключении; ошибка закрытия не скрывается. Физическое удаление временного файла этим выводом не проверяется.

  6. СоздатьВременныйФайл сразу возвращает поток. Он не возвращает путь к обычному чужому файлу.

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

  1. Пять сравнений ожидаются Истина: фактический тип, обе возможности, размер 3, прочитано 3, байты 65/66/67.

  2. После успешного закрытия показано сообщение о закрытом потоке. Оно не утверждает проверенное физическое удаление файла с диска.

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

Создан, заполнен, прочитан и закрыт собственный временный поток с маленьким порогом памяти.

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

  1. Лимит памяти 2 здесь выбран только для трёхбайтного опыта; в реальной задаче его определяют по ожидаемым размерам и нагрузке.

  2. Размер буфера не ограничивает итоговый размер данных.

  3. Не выводить имя потока как доказательство нахождения данных только в памяти.

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

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

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

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

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