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

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

Чтение и запись целого файла

Иногда файл нужен целиком: прочитать его в строку, заменить содержимое одной операцией или убедиться, что объект по пути существует. FILEEXISTS, DIREXISTS и PATHEXISTS проверяют наличие объекта, READFILE и READALLLINES читают весь текст, WRITEFILE и APPENDFILE записывают его. Каждая функция получает путь STRING и не оставляет открытого ресурса.

Предел читаемого текста

READFILE возвращает не более 16 777 216 кодовых единиц UTF-16. Превышение вызывает MB3007 вместо возврата частичного текста. READALLLINES читает текст целиком перед разделением на строки и подчиняется тому же пределу для исходного прочитанного текста. Это предел текста после декодирования, а не число байтов файла; общие правила указаны в описании STRING.

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

Страница объединяет отдельные встроенные функции FILEEXISTS, DIREXISTS, PATHEXISTS, READFILE, READALLLINES, WRITEFILE, APPENDFILE; общей конструкции для всей группы нет, поэтому каждый блок синтаксиса относится к указанной функции.

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

FILEEXISTS

FILEEXISTS проверяет, существует ли обычный файл по заданному пути. Функция работает с путём файловой системы либо со строковыми частями пути.

Синтаксис

FILEEXISTS(<путь>)

Аргументы

<путь> имеет тип STRING. Аргумент задаёт путь к файлу.

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

Результат BOOLEAN равен TRUE, если по разрешённому пути существует файл; отсутствующий файл или каталог вместо файла дают FALSE.

Диагностика

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

Пример

DIM folder AS STRING = MAKETEMPDIR("axiom_manual_")
DIM path AS STRING = COMBINEPATH(folder, "notes.txt")
WRITEFILE(path, "AB")
PRINT FILEEXISTS(path)
DELETEDIRRECURSIVE(folder)

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

TRUE

DIREXISTS

Функция DIREXISTS проверяет, существует ли каталог по заданному пути. Допустимы как путь файловой системы, так и строковые части пути.

Синтаксис

DIREXISTS(<путь>)

Аргументы

<путь> имеет тип STRING. Аргумент задаёт путь к каталогу.

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

Результат BOOLEAN равен TRUE, если по разрешённому пути существует каталог; отсутствующий каталог или файл вместо каталога дают FALSE.

Диагностика

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

Пример

DIM folder AS STRING = MAKETEMPDIR("axiom_manual_")
DIM path AS STRING = COMBINEPATH(folder, "notes.txt")
WRITEFILE(path, "AB")
PRINT DIREXISTS(folder)
DELETEDIRRECURSIVE(folder)

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

TRUE

PATHEXISTS

Функция PATHEXISTS проверяет, существует ли файл или каталог по заданному пути. Обращение идёт к пути файловой системы либо к строковым частям пути.

Синтаксис

PATHEXISTS(<путь>)

Аргументы

<путь> имеет тип STRING. Аргумент задаёт путь к файлу или каталогу.

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

Результат BOOLEAN равен TRUE для существующего файла или каталога и FALSE, если ни один из этих объектов не найден.

Диагностика

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

Пример

DIM folder AS STRING = MAKETEMPDIR("axiom_manual_")
DIM path AS STRING = COMBINEPATH(folder, "notes.txt")
WRITEFILE(path, "AB")
PRINT PATHEXISTS(path)
DELETEDIRRECURSIVE(folder)

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

TRUE

READFILE

Вызов READFILE читает весь текст файла в строку. Работа идёт с путём файловой системы либо со строковыми частями пути.

Синтаксис

READFILE(<путь>)
READFILE(<путь>, <кодировка>)

Аргументы

<путь> имеет тип STRING. Аргумент задаёт путь к файлу.

<кодировка> имеет тип STRING. Строка кодировки выбирает UTF-8, WINDOWS-1251, UTF-16LE или UTF-16BE; регистр и крайние пробелы игнорируются.

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

Результат имеет тип STRING. Пустой файл даёт пустую строку. Переводы строк сохраняются. Файл должен существовать. Без явной кодировки чтение проверяет UTF-8 и при ошибке использует WINDOWS-1251; запись использует UTF-8 без BOM. Явная кодировка проверяется строго; UTF-16 при создании получает BOM. Совпадающий Unicode BOM пропускается при чтении, конфликтующий вызывает ошибку. APPENDFILE с явной кодировкой проверяет прежний текст перед добавлением.

Диагностика

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

Пример

DIM folder AS STRING = MAKETEMPDIR("axiom_manual_")
DIM path AS STRING = COMBINEPATH(folder, "notes.txt")
WRITEFILE(path, "AB")
PRINT READFILE(path)
DELETEDIRRECURSIVE(folder)

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

AB

READALLLINES

READALLLINES читает строки файла в одномерный массив строк. Функция работает с путём файловой системы либо со строковыми частями пути.

Синтаксис

READALLLINES(<путь>)
READALLLINES(<путь>, <кодировка>)

Аргументы

<путь> имеет тип STRING. Аргумент задаёт путь к файлу.

<кодировка> имеет тип STRING. Строка кодировки выбирает UTF-8, WINDOWS-1251, UTF-16LE или UTF-16BE; регистр и крайние пробелы игнорируются.

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

Результат имеет тип массив STRING ранга 1. Разделители CR, LF и CRLF удаляются. Конечный разделитель не добавляет лишнюю строку; пустой файл даёт выделенный массив с границами 1 TO 0. Непустой результат имеет границы 1 TO N. Без явной кодировки чтение проверяет UTF-8 и при ошибке использует WINDOWS-1251; запись использует UTF-8 без BOM. Явная кодировка проверяется строго; UTF-16 при создании получает BOM. Совпадающий Unicode BOM пропускается при чтении, конфликтующий вызывает ошибку. APPENDFILE с явной кодировкой проверяет прежний текст перед добавлением.

Диагностика

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

Пример

DIM folder AS STRING = MAKETEMPDIR("axiom_manual_")
DIM path AS STRING = COMBINEPATH(folder, "notes.txt")
WRITEFILE(path, "AB")
DIM lines[] AS STRING
lines[] = READALLLINES(path)
PRINT ARRAYLENGTH(lines[])
PRINT lines[1]
DELETEDIRRECURSIVE(folder)

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

1
AB

WRITEFILE

Функция WRITEFILE записывает текст в файл, заменяя прежнее содержимое. Допустимы как путь файловой системы, так и строковые части пути.

Синтаксис

WRITEFILE(<путь>, <текст>)
WRITEFILE(<путь>, <текст>, <кодировка>)

Аргументы

<путь> имеет тип STRING. Аргумент задаёт путь к файлу.

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

<кодировка> имеет тип STRING. Строка кодировки выбирает UTF-8, WINDOWS-1251, UTF-16LE или UTF-16BE; регистр и крайние пробелы игнорируются.

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

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

Результат имеет тип BOOLEAN. Отсутствующий файл создаётся. Родительский каталог не создаётся. Разделитель строки автоматически не добавляется; пустой текст оставляет пустой файл. Без явной кодировки чтение проверяет UTF-8 и при ошибке использует WINDOWS-1251; запись использует UTF-8 без BOM. Явная кодировка проверяется строго; UTF-16 при создании получает BOM. Совпадающий Unicode BOM пропускается при чтении, конфликтующий вызывает ошибку. APPENDFILE с явной кодировкой проверяет прежний текст перед добавлением.

Диагностика

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

Пример

DIM folder AS STRING = MAKETEMPDIR("axiom_manual_")
DIM path AS STRING = COMBINEPATH(folder, "notes.txt")
WRITEFILE(path, "AB")
PRINT WRITEFILE(path, "CD")
PRINT READFILE(path)
DELETEDIRRECURSIVE(folder)

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

TRUE
CD

APPENDFILE

Вызов APPENDFILE дописывает текст в конец файла. Обращение идёт к пути файловой системы либо к строковым частям пути.

Синтаксис

APPENDFILE(<путь>, <текст>)
APPENDFILE(<путь>, <текст>, <кодировка>)

Аргументы

<путь> имеет тип STRING. Аргумент задаёт путь к файлу.

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

<кодировка> имеет тип STRING. Строка кодировки выбирает UTF-8, WINDOWS-1251, UTF-16LE или UTF-16BE; регистр и крайние пробелы игнорируются.

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

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

Результат имеет тип BOOLEAN. Отсутствующий файл создаётся. Родительский каталог не создаётся. Разделитель строки автоматически не добавляется; пустой текст не увеличивает содержимое. Без явной кодировки чтение проверяет UTF-8 и при ошибке использует WINDOWS-1251; запись использует UTF-8 без BOM. Явная кодировка проверяется строго; UTF-16 при создании получает BOM. Совпадающий Unicode BOM пропускается при чтении, конфликтующий вызывает ошибку. APPENDFILE с явной кодировкой проверяет прежний текст перед добавлением.

При явной кодировке каждый вызов APPENDFILE проверяет всё существующее содержимое перед дописью. Для серии записей предпочтителен оператор OPEN ... FOR APPEND ... USING и вызовы WRITE: проверка исходного содержимого выполняется один раз при открытии. Строгая проверка кодировки сохраняется; несовместимые данные не дописываются. Во время проверки содержимого обрабатывается остановка программы.

MAKEDIR(".artifacts")
DIM path AS STRING = ".artifacts/append_series.txt"
WRITEFILE(path, "", "UTF-8")
DIM f AS FILE
OPEN path FOR APPEND AS f USING "UTF-8"
FOR i = 1 TO 3
    WRITE(f, "А😀")
NEXT
CLOSE f
PRINT READFILE(path, "UTF-8")
DELETEFILE(path)
' Результат: А😀А😀А😀.

Диагностика

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

Пример

DIM folder AS STRING = MAKETEMPDIR("axiom_manual_")
DIM path AS STRING = COMBINEPATH(folder, "notes.txt")
WRITEFILE(path, "AB")
PRINT APPENDFILE(path, "CD")
PRINT READFILE(path)
DELETEDIRRECURSIVE(folder)

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

TRUE
ABCD

См. также

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