Runtime API File Objects - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

Файлы и MemoryStream — объектные методы

File · MemoryStream · Оглавление

Эти методы вызываются у возвращённого объекта, а не как самостоятельные UO-команды. Они не входят второй раз в число 1037 глобальных имён.

File(path)

Метод Действие
Open() Открывает существующий файл для чтения.
Create() Открывает запись с начала. Существующий более длинный файл не обрезается.
WriteLn(value) Записывает строку и сбрасывает буфер. Без открытого writer ничего не пишет.
ReadNumber() Читает строку как десятичный Integer. Неверная строка/конец файла — 0; закрытый reader — ошибка.
Close() Сбрасывает/закрывает поток.

Записать число в новый примерный файл:

VAR output = File('wiki-example-number.txt')
output.Create()
output.WriteLn('42')
output.Close()

Прочитать число из существующего файла:

VAR input = File('wiki-example-number.txt')
input.Open()
VAR value = input.ReadNumber()
input.Close()
UO.Print(CStr(value))

Записать несколько строк:

VAR output = File('wiki-example-lines.txt')
output.Create()
FOR index = 1 TO 3
    output.WriteLn(CStr(index))
NEXT
output.Close()

Имена файлов демонстрационные; при выполнении создаются/изменяются локальные файлы. В File-объекте нет зарегистрированных ReadLn, Append или Exists. Проверка наличия файла выполняется отдельной зарегистрированной командой, если она нужна вашему сценарию.

MemoryStream()

Метод Действие
Clear() Очищает байты и устанавливает позицию 0.
Length() Число байтов.
Position() Текущая позиция чтения.
Rewind() Устанавливает позицию 0.
ReadByte() Читает следующий байт 0–255; конец потока — -1.
ToArray() Возвращает массив Integer-байтов, не изменяя позицию.
SaveToFile(path) Записывает все байты в файл, перезаписывая прежнее содержимое.

Пустой поток и конец чтения:

VAR stream = MemoryStream()
UO.Print(CStr(stream.Length())) # 0
UO.Print(CStr(stream.ReadByte())) # -1

Обход уже заполненного потока:

VAR stream = MemoryStream()
# Перед циклом поток можно заполнить через HTTP_Get(url, stream).
stream.Rewind()
WHILE stream.Position() < stream.Length()
    VAR byteValue = stream.ReadByte()
    UO.Print(CStr(byteValue))
WEND

Получить массив и очистить поток:

VAR stream = MemoryStream()
VAR bytes = stream.ToArray()
UO.Print(CStr(GetArrayLength(bytes)))
stream.Clear()

WriteByte и Close не зарегистрированы как методы MemoryStream этого runtime. Сетевое заполнение смотрите в точных перегрузках HTTP_Get.