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)Ожидаемый вывод:
TRUEDIREXISTS
Функция 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)Ожидаемый вывод:
TRUEPATHEXISTS
Функция 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)Ожидаемый вывод:
TRUEREADFILE
Вызов 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)Ожидаемый вывод:
ABREADALLLINES
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
ABWRITEFILE
Функция 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
CDAPPENDFILE
Вызов 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