Axiom Справочник языка

14 · Файловая система

Работа с открытым файлом

После OPEN файл читается и пишется по частям, поэтому операция опирается на текущее состояние ресурса: открыт ли он, где стоит позиция, не достигнут ли конец. Функции этой страницы работают с ресурсом FILE: ISOPEN, FILEPATH и FILEMODE сообщают сведения о нём, FILEPOS, FILELENGTH, LINENUMBER и EOF описывают позицию, READTOEND, READTEXT, READLINE, READLINES и SKIPLINE читают текст, WRITE, WRITELINE и NEWLINE записывают его, а FLUSH, SEEKFILE и REWIND управляют завершением записи и перемещением.

Предел строкового результата

Строка, возвращаемая READLINE, READTEXT или READTOEND, ограничена 16 777 216 кодовыми единицами UTF-16. Превышение вызывает MB3007. Единица аргумента READTEXT остаётся кодовой точкой, а FILEPOS и FILELENGTH измеряются в байтах; общий предел результата всегда измеряется в UTF-16. См. предельную длину STRING.

WRITE и WRITELINE сохраняют отложенную запись: передача накопленного текста в целевой файловый поток выполняется при FLUSH, CLOSE и предусмотренном перемещении позиции. Внутреннее хранение отложенной записи не меняет этот порядок видимости.

Общие условия работы

Страница объединяет отдельные встроенные функции ISOPEN, FILEPATH, FILEMODE, FILEPOS, FILELENGTH, LINENUMBER, EOF, READTOEND, READTEXT, READLINE, READLINES, SKIPLINE, WRITE, WRITELINE, NEWLINE, FLUSH, SEEKFILE, REWIND; общей конструкции для всей группы нет, поэтому каждый блок синтаксиса относится к указанной функции.

Пути подчиняются общим правилам файловых операций. Они доступны в консольной программе и в IDE без оператора SCREEN; относительные пути разрешаются от CURRENTDIR() текущего запуска, а перед разрешением пути раскрываются переменные окружения. Нулевой символ в пути недопустим. Создание файла не создаёт родительский каталог; сначала вызовите MAKEDIR, если он нужен.

ISOPEN

ISOPEN проверяет, открыт ли ресурс FILE. Допускается любой ресурс FILE, включая ещё не открытый и уже закрытый.

Синтаксис

ISOPEN(<файл>)

Аргументы

<файл> имеет тип FILE. Значение типа FILE обозначает проверяемый ресурс; неоткрытое и закрытое значения также разрешены.

Результат и правила работы

Результат имеет тип BOOLEAN. Ещё не открытое и закрытое значение FILE дают FALSE; открытый ресурс даёт TRUE. Это единственная функция этой группы, которой не требуется открытый файл.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. Ещё не открытый и закрытый ресурс допустимы и дают FALSE; открытие ресурса для этой проверки не требуется.

Пример

DIM folder AS STRING = MAKETEMPDIR("axiom_manual_")
DIM path AS STRING = COMBINEPATH(folder, "notes.txt")
WRITEFILE(path, "AB")
DIM f AS FILE
OPEN path FOR INPUT AS f
PRINT ISOPEN(f)
CLOSE f
DELETEDIRRECURSIVE(folder)

Ожидаемый вывод:

TRUE

FILEPATH

Функция FILEPATH возвращает полный путь открытого ресурса FILE. Аргумент FILE должен быть открыт оператором OPEN; требуемый режим указан ниже.

Синтаксис

FILEPATH(<файл>)

Аргументы

<файл> имеет тип FILE. Значение типа FILE обозначает ресурс, открытый оператором OPEN.

Результат и правила работы

Результат STRING содержит полный путь ресурса, сохранённый при OPEN. Функция требует открытый ресурс и не меняет его позицию.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3007 возникает, если FILE ещё не открыт или уже закрыт. Любой режим открытого ресурса допустим.

Пример

DIM folder AS STRING = MAKETEMPDIR("axiom_manual_")
DIM path AS STRING = COMBINEPATH(folder, "notes.txt")
WRITEFILE(path, "AB")
DIM f AS FILE
OPEN path FOR INPUT AS f
PRINT FILEPATH(f) = FULLPATH(path)
CLOSE f
DELETEDIRRECURSIVE(folder)

Ожидаемый вывод:

TRUE

FILEMODE

Вызов FILEMODE возвращает строковое имя режима открытого ресурса FILE. Аргумент FILE должен быть открыт оператором OPEN; требуемый режим указан ниже.

Синтаксис

FILEMODE(<файл>)

Аргументы

<файл> имеет тип FILE. Значение типа FILE обозначает ресурс, открытый оператором OPEN.

Результат и правила работы

Результат имеет тип STRING. Возвращается ровно INPUT, OUTPUT или APPEND.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3007 возникает, если FILE ещё не открыт или уже закрыт. Любой режим открытого ресурса допустим.

Пример

DIM folder AS STRING = MAKETEMPDIR("axiom_manual_")
DIM path AS STRING = COMBINEPATH(folder, "notes.txt")
WRITEFILE(path, "AB")
DIM f AS FILE
OPEN path FOR INPUT AS f
PRINT FILEMODE(f)
CLOSE f
DELETEDIRRECURSIVE(folder)

Ожидаемый вывод:

INPUT

FILEPOS

FILEPOS возвращает текущую байтовую позицию открытого файла. Аргумент FILE должен быть открыт оператором OPEN; требуемый режим указан ниже.

Синтаксис

FILEPOS(<файл>)

Аргументы

<файл> имеет тип FILE. Значение типа FILE обозначает ресурс, открытый оператором OPEN.

Результат и правила работы

Результат имеет тип LONG. Начальная позиция INPUT и OUTPUT равна 0; APPEND начинает с конца. Распознанный BOM не входит в смещение. Накопленная запись уже учитывается до FLUSH.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3007 возникает, если FILE ещё не открыт или уже закрыт. Любой режим открытого ресурса допустим.

Пример

DIM folder AS STRING = MAKETEMPDIR("axiom_manual_")
DIM path AS STRING = COMBINEPATH(folder, "notes.txt")
WRITEFILE(path, "AB")
DIM f AS FILE
OPEN path FOR INPUT AS f
PRINT READTEXT(f, 1)
PRINT FILEPOS(f)
CLOSE f
DELETEDIRRECURSIVE(folder)

Ожидаемый вывод:

A
1

FILELENGTH

Функция FILELENGTH возвращает текущую длину содержимого открытого файла в байтах. Аргумент FILE должен быть открыт оператором OPEN; требуемый режим указан ниже.

Синтаксис

FILELENGTH(<файл>)

Аргументы

<файл> имеет тип FILE. Значение типа FILE обозначает ресурс, открытый оператором OPEN.

Результат и правила работы

Результат имеет тип LONG. Распознанный BOM не входит в длину; FILESIZE учитывает физический BOM. Накопленная запись уже учитывается до FLUSH.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3007 возникает, если FILE ещё не открыт или уже закрыт. Любой режим открытого ресурса допустим.

Пример

DIM folder AS STRING = MAKETEMPDIR("axiom_manual_")
DIM path AS STRING = COMBINEPATH(folder, "notes.txt")
WRITEFILE(path, "AB")
DIM f AS FILE
OPEN path FOR INPUT AS f
PRINT FILELENGTH(f)
CLOSE f
DELETEDIRRECURSIVE(folder)

Ожидаемый вывод:

2

LINENUMBER

Вызов LINENUMBER возвращает номер строки в текущей позиции чтения. Аргумент FILE должен быть открыт оператором OPEN; требуемый режим указан ниже.

Синтаксис

LINENUMBER(<файл>)

Аргументы

<файл> имеет тип FILE. Значение типа FILE обозначает ресурс, открытый оператором OPEN в режиме INPUT.

Результат и правила работы

Результат имеет тип LONG. Нумерация начинается с 1. CR, LF и CRLF считаются разделителями строк. Позиция не меняется; нечётная позиция UTF-16 отклоняется.

В собственном цикле чтения проверяется остановка программы. Остановка завершает запуск и не перехватывается пользовательским CATCH; обычная ошибка чтения по-прежнему обрабатывается через MB3007.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3007 возникает, если ресурс не открыт, открыт не в INPUT либо операция чтения не удалась. Нечётное смещение UTF-16 вызывает MB3007 без сдвига позиции.

Пример

DIM folder AS STRING = MAKETEMPDIR("axiom_manual_")
DIM path AS STRING = COMBINEPATH(folder, "notes.txt")
WRITEFILE(path, "AB")
DIM f AS FILE
OPEN path FOR INPUT AS f
PRINT LINENUMBER(f)
CLOSE f
DELETEDIRRECURSIVE(folder)

Ожидаемый вывод:

1

EOF

EOF проверяет, достигнута ли конечная байтовая позиция файла при чтении. Аргумент FILE должен быть открыт оператором OPEN; требуемый режим указан ниже.

Синтаксис

EOF(<файл>)

Аргументы

<файл> имеет тип FILE. Значение типа FILE обозначает ресурс, открытый оператором OPEN в режиме INPUT.

Результат и правила работы

Результат имеет тип BOOLEAN. Нужен режим INPUT. В пустом файле результат TRUE уже после OPEN.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3007 возникает, если ресурс не открыт, открыт не в INPUT либо операция чтения не удалась.

Пример

DIM folder AS STRING = MAKETEMPDIR("axiom_manual_")
DIM path AS STRING = COMBINEPATH(folder, "notes.txt")
WRITEFILE(path, "AB")
DIM f AS FILE
OPEN path FOR INPUT AS f
PRINT EOF(f)
READTOEND(f)
PRINT EOF(f)
CLOSE f
DELETEDIRRECURSIVE(folder)

Ожидаемый вывод:

FALSE
TRUE

READTOEND

Функция READTOEND читает оставшийся текст открытого файла в строку. Аргумент FILE должен быть открыт оператором OPEN; требуемый режим указан ниже.

Синтаксис

READTOEND(<файл>)

Аргументы

<файл> имеет тип FILE. Значение типа FILE обозначает ресурс, открытый оператором OPEN в режиме INPUT.

Результат и правила работы

Результат имеет тип STRING. Нужен режим INPUT. В конце файла возвращается пустая строка. При успешном чтении позиция переходит в конец; ошибочное декодирование восстанавливает исходную позицию.

В собственном цикле чтения проверяется остановка программы. Остановка завершает запуск и не перехватывается пользовательским CATCH; обычная ошибка чтения по-прежнему обрабатывается через MB3007.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3007 возникает, если ресурс не открыт, открыт не в INPUT либо операция чтения не удалась. При ошибке декодирования также возникает MB3007, а исходная позиция операции восстанавливается.

Пример

DIM folder AS STRING = MAKETEMPDIR("axiom_manual_")
DIM path AS STRING = COMBINEPATH(folder, "notes.txt")
WRITEFILE(path, "AB")
DIM f AS FILE
OPEN path FOR INPUT AS f
PRINT READTOEND(f)
CLOSE f
DELETEDIRRECURSIVE(folder)

Ожидаемый вывод:

AB

READTEXT

Вызов READTEXT читает не более заданного числа скалярных значений Unicode. Аргумент FILE должен быть открыт оператором OPEN; требуемый режим указан ниже.

Синтаксис

READTEXT(<файл>, <количество>)

Аргументы

<файл> имеет тип FILE. Значение типа FILE обозначает ресурс, открытый оператором OPEN в режиме INPUT.

<количество> имеет тип INTEGER. Целое число INTEGER задаёт максимальное число читаемых скалярных значений Unicode. Ноль возвращает пустой результат и не сдвигает позицию; отрицательное число недопустимо.

Результат и правила работы

Результат имеет тип STRING. Нужен режим INPUT. Символ за пределами BMP считается одним скалярным значением Unicode, а не двумя единицами UTF-16. Если текста осталось меньше, возвращается остаток; в конце — пустая строка. Ошибочное декодирование восстанавливает исходную позицию.

В собственном цикле чтения проверяется остановка программы. Остановка завершает запуск и не перехватывается пользовательским CATCH; обычная ошибка чтения по-прежнему обрабатывается через MB3007.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3007 возникает, если ресурс не открыт, открыт не в INPUT либо операция чтения не удалась. Отрицательное количество вызывает MB3007; ноль допустим. При ошибке декодирования также возникает MB3007, а исходная позиция операции восстанавливается.

Пример

DIM folder AS STRING = MAKETEMPDIR("axiom_manual_")
DIM path AS STRING = COMBINEPATH(folder, "notes.txt")
WRITEFILE(path, "AB")
DIM f AS FILE
OPEN path FOR INPUT AS f
PRINT READTEXT(f, 1)
PRINT READTEXT(f, 8)
CLOSE f
DELETEDIRRECURSIVE(folder)

Ожидаемый вывод:

A
B

READLINE

READLINE читает одну строку открытого файла без её разделителя. Аргумент FILE должен быть открыт оператором OPEN; требуемый режим указан ниже.

Синтаксис

READLINE(<файл>)

Аргументы

<файл> имеет тип FILE. Значение типа FILE обозначает ресурс, открытый оператором OPEN в режиме INPUT.

Результат и правила работы

Результат имеет тип STRING. Нужен режим INPUT. Разделители CR, LF и CRLF потребляются, но не возвращаются. Пустая строка между разделителями даёт пустую строку. Чтение после EOF вызывает MB3007. Ошибочное декодирование восстанавливает позицию.

В собственном цикле чтения проверяется остановка программы. Остановка завершает запуск и не перехватывается пользовательским CATCH; обычная ошибка чтения по-прежнему обрабатывается через MB3007.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3007 возникает, если ресурс не открыт, открыт не в INPUT либо операция чтения не удалась. Вызов после конца файла вызывает MB3007. При ошибке декодирования также возникает MB3007, а исходная позиция операции восстанавливается.

Пример

DIM folder AS STRING = MAKETEMPDIR("axiom_manual_")
DIM path AS STRING = COMBINEPATH(folder, "notes.txt")
WRITEFILE(path, "AB")
DIM f AS FILE
OPEN path FOR INPUT AS f
PRINT READLINE(f)
PRINT EOF(f)
CLOSE f
DELETEDIRRECURSIVE(folder)

Ожидаемый вывод:

AB
TRUE

READLINES

Функция READLINES читает не более заданного числа строк открытого файла в массив. Аргумент FILE должен быть открыт оператором OPEN; требуемый режим указан ниже.

Синтаксис

READLINES(<файл>, <количество>)

Аргументы

<файл> имеет тип FILE. Значение типа FILE обозначает ресурс, открытый оператором OPEN в режиме INPUT.

<количество> имеет тип INTEGER. Целое число INTEGER задаёт максимальное число читаемых строк. Ноль возвращает пустой результат и не сдвигает позицию; отрицательное число недопустимо.

Результат и правила работы

Результат имеет тип массив STRING ранга 1. Нужен режим INPUT. Разделители CR, LF и CRLF не входят в строки результата. Если строк меньше, возвращается остаток. В конце файла или при нулевом количестве возвращается выделенный массив 1 TO 0; иначе границы равны 1 TO N. Ошибка чтения восстанавливает исходную позицию всей операции.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3007 возникает, если ресурс не открыт, открыт не в INPUT либо операция чтения не удалась. Отрицательное количество вызывает MB3007; ноль допустим. При ошибке декодирования также возникает MB3007, а исходная позиция операции восстанавливается.

Пример

DIM folder AS STRING = MAKETEMPDIR("axiom_manual_")
DIM path AS STRING = COMBINEPATH(folder, "notes.txt")
WRITEFILE(path, "AB")
DIM f AS FILE
OPEN path FOR INPUT AS f
DIM lines[] AS STRING
lines[] = READLINES(f, 3)
PRINT ARRAYLENGTH(lines[])
PRINT lines[1]
CLOSE f
DELETEDIRRECURSIVE(folder)

Ожидаемый вывод:

1
AB

SKIPLINE

Вызов SKIPLINE пропускает одну строку открытого файла. Аргумент FILE должен быть открыт оператором OPEN; требуемый режим указан ниже.

Синтаксис

SKIPLINE(<файл>)

Аргументы

<файл> имеет тип FILE. Значение типа FILE обозначает ресурс, открытый оператором OPEN в режиме INPUT.

Результат и правила работы

Результат имеет тип BOOLEAN. Нужен режим INPUT. Разделитель строки также пропускается; вызов после EOF вызывает MB3007. При успехе возвращается TRUE.

Функция SKIPLINE обрабатывает строку блоками с ограниченной памятью и не создаёт строкового результата. Длина пропускаемой строки может превышать предел STRING. Проверка кодировки сохраняется: при ошибке декодирования исходная позиция восстанавливается. Во время прохода проверяется остановка программы.

Пример длинной строки: large_line.axm.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3007 возникает, если ресурс не открыт, открыт не в INPUT либо операция чтения не удалась. Вызов после конца файла вызывает MB3007. При ошибке декодирования также возникает MB3007, а исходная позиция операции восстанавливается.

Пример

DIM folder AS STRING = MAKETEMPDIR("axiom_manual_")
DIM path AS STRING = COMBINEPATH(folder, "notes.txt")
WRITEFILE(path, "AB")
DIM f AS FILE
OPEN path FOR INPUT AS f
PRINT SKIPLINE(f)
PRINT EOF(f)
CLOSE f
DELETEDIRRECURSIVE(folder)

Ожидаемый вывод:

TRUE
TRUE

WRITE

WRITE записывает строку в открытый файл без добавления разделителя строки. Аргумент FILE должен быть открыт оператором OPEN; требуемый режим указан ниже.

Синтаксис

WRITE(<файл>, <текст>)

Аргументы

<файл> имеет тип FILE. Значение типа FILE обозначает ресурс, открытый оператором OPEN в режиме OUTPUT или APPEND.

<текст> имеет тип STRING. Строка текста содержит символы, которые нужно записать.

Результат и правила работы

При успешном завершении функция возвращает TRUE; отказ сообщается диагностикой, а не значением FALSE.

Результат имеет тип BOOLEAN. Нужен режим OUTPUT или APPEND. Пустой текст возвращает TRUE без сдвига позиции. Байты сначала накапливаются; для передачи в поток нужны FLUSH или CLOSE.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3007 возникает, если ресурс не открыт, открыт не в OUTPUT или APPEND либо запись не удалась. Текст, непредставимый в явно выбранной кодировке, и непарный суррогат вызывают MB3007 до изменения буфера.

Пример

DIM folder AS STRING = MAKETEMPDIR("axiom_manual_")
DIM path AS STRING = COMBINEPATH(folder, "notes.txt")
WRITEFILE(path, "AB")
DIM f AS FILE
OPEN path FOR OUTPUT AS f
PRINT WRITE(f, "XY")
PRINT FILEPOS(f)
CLOSE f
DELETEDIRRECURSIVE(folder)

Ожидаемый вывод:

TRUE
2

WRITELINE

Функция WRITELINE записывает строку в открытый файл и добавляет символ LF. Аргумент FILE должен быть открыт оператором OPEN; требуемый режим указан ниже.

Синтаксис

WRITELINE(<файл>, <текст>)

Аргументы

<файл> имеет тип FILE. Значение типа FILE обозначает ресурс, открытый оператором OPEN в режиме OUTPUT или APPEND.

<текст> имеет тип STRING. Строка текста содержит символы, которые нужно записать.

Результат и правила работы

При успешном завершении функция возвращает TRUE; отказ сообщается диагностикой, а не значением FALSE.

Результат имеет тип BOOLEAN. Нужен режим OUTPUT или APPEND. Даже пустая строка добавляет один LF. Байты накапливаются до FLUSH или CLOSE.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3007 возникает, если ресурс не открыт, открыт не в OUTPUT или APPEND либо запись не удалась. Текст, непредставимый в явно выбранной кодировке, и непарный суррогат вызывают MB3007 до изменения буфера.

Пример

DIM folder AS STRING = MAKETEMPDIR("axiom_manual_")
DIM path AS STRING = COMBINEPATH(folder, "notes.txt")
WRITEFILE(path, "AB")
DIM f AS FILE
OPEN path FOR OUTPUT AS f
PRINT WRITELINE(f, "XY")
PRINT FILELENGTH(f)
CLOSE f
DELETEDIRRECURSIVE(folder)

Ожидаемый вывод:

TRUE
3

NEWLINE

Вызов NEWLINE записывает символ LF в открытый файл. Аргумент FILE должен быть открыт оператором OPEN; требуемый режим указан ниже.

Синтаксис

NEWLINE(<файл>)

Аргументы

<файл> имеет тип FILE. Значение типа FILE обозначает ресурс, открытый оператором OPEN в режиме OUTPUT или APPEND.

Результат и правила работы

При успешном завершении функция возвращает TRUE; отказ сообщается диагностикой, а не значением FALSE.

Результат имеет тип BOOLEAN. Нужен режим OUTPUT или APPEND. Функция эквивалентна WRITELINE(файл, "").

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3007 возникает, если ресурс не открыт, открыт не в OUTPUT или APPEND либо запись не удалась.

Пример

DIM folder AS STRING = MAKETEMPDIR("axiom_manual_")
DIM path AS STRING = COMBINEPATH(folder, "notes.txt")
WRITEFILE(path, "AB")
DIM f AS FILE
OPEN path FOR OUTPUT AS f
PRINT NEWLINE(f)
PRINT FILELENGTH(f)
CLOSE f
DELETEDIRRECURSIVE(folder)

Ожидаемый вывод:

TRUE
1

FLUSH

FLUSH передаёт накопленные байты записи в файловый поток. Аргумент FILE должен быть открыт оператором OPEN; требуемый режим указан ниже.

Синтаксис

FLUSH(<файл>)

Аргументы

<файл> имеет тип FILE. Значение типа FILE обозначает ресурс, открытый оператором OPEN в режиме OUTPUT или APPEND.

Результат и правила работы

При успешном завершении функция возвращает TRUE; отказ сообщается диагностикой, а не значением FALSE.

Результат имеет тип BOOLEAN. Нужен режим OUTPUT или APPEND. Функция не меняет текст и не добавляет разделителей; возвращает TRUE при успехе.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3007 возникает, если ресурс не открыт, открыт не в OUTPUT или APPEND либо запись не удалась.

Пример

DIM folder AS STRING = MAKETEMPDIR("axiom_manual_")
DIM path AS STRING = COMBINEPATH(folder, "notes.txt")
WRITEFILE(path, "AB")
DIM f AS FILE
OPEN path FOR OUTPUT AS f
WRITE(f, "XY")
PRINT FLUSH(f)
PRINT FILESIZE(path)
CLOSE f
DELETEDIRRECURSIVE(folder)

Ожидаемый вывод:

TRUE
2

SEEKFILE

Функция SEEKFILE переставляет текущую позицию открытого файла на заданное байтовое смещение. Аргумент FILE должен быть открыт оператором OPEN; требуемый режим указан ниже.

Синтаксис

SEEKFILE(<файл>, <позиция>)

Аргументы

<файл> имеет тип FILE. Значение типа FILE обозначает ресурс, открытый оператором OPEN в режиме INPUT или OUTPUT.

<позиция> имеет тип LONG. Целое число LONG задаёт байтовое смещение от начала содержимого, без распознанного BOM; допустим диапазон от 0 до FILELENGTH(файл) включительно.

Результат и правила работы

При успешном завершении функция возвращает TRUE; отказ сообщается диагностикой, а не значением FALSE.

Результат имеет тип BOOLEAN. Разрешены режимы INPUT и OUTPUT. В OUTPUT накопленная запись перед перемещением передаётся в поток. APPEND запрещает явное позиционирование. Сдвиг в середину многобайтового символа возможен, но последующее чтение может дать ошибку декодирования.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3007 возникает, если ресурс не открыт, открыт в APPEND, позиция отрицательна или больше FILELENGTH, либо поток не допускает перемещение. Позиция внутри многобайтового символа может быть установлена, но последующее чтение может вызвать MB3007.

Пример

DIM folder AS STRING = MAKETEMPDIR("axiom_manual_")
DIM path AS STRING = COMBINEPATH(folder, "notes.txt")
WRITEFILE(path, "AB")
DIM f AS FILE
OPEN path FOR INPUT AS f
PRINT SEEKFILE(f, 1)
PRINT READTOEND(f)
CLOSE f
DELETEDIRRECURSIVE(folder)

Ожидаемый вывод:

TRUE
B

REWIND

Вызов REWIND переставляет позицию открытого файла в начало содержимого. Аргумент FILE должен быть открыт оператором OPEN; требуемый режим указан ниже.

Синтаксис

REWIND(<файл>)

Аргументы

<файл> имеет тип FILE. Значение типа FILE обозначает ресурс, открытый оператором OPEN в режиме INPUT или OUTPUT.

Результат и правила работы

При успешном завершении функция возвращает TRUE; отказ сообщается диагностикой, а не значением FALSE.

Результат имеет тип BOOLEAN. Разрешены INPUT и OUTPUT; APPEND отклоняется. Распознанный BOM пропускается. Функция возвращает TRUE при успехе.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3007 возникает, если ресурс не открыт, открыт в APPEND либо поток не допускает перемещение в начало.

Пример

DIM folder AS STRING = MAKETEMPDIR("axiom_manual_")
DIM path AS STRING = COMBINEPATH(folder, "notes.txt")
WRITEFILE(path, "AB")
DIM f AS FILE
OPEN path FOR INPUT AS f
READTEXT(f, 1)
PRINT REWIND(f)
PRINT READTOEND(f)
CLOSE f
DELETEDIRRECURSIVE(folder)

Ожидаемый вывод:

TRUE
AB

См. также

Файловая система · OPEN · CLOSE · TRY