Lua - Файловый ввод-вывод
Библиотека ввода-вывода используется для чтения и управления файлами в Lua. В Lua есть два типа файловых операций: неявные файловые дескрипторы и явные файловые дескрипторы.
Для следующих примеров мы будем использовать образец файла test.lua, как показано ниже.
-- sample test.lua
-- sample2 test.luaВ простой операции открытия файла используется следующий оператор.
file = io.open (filename [, mode])Различные режимы файлов перечислены в следующей таблице.
| Sr. No. | Режим и описание | 
|---|---|
| 1 | "r" Режим только для чтения - это режим по умолчанию, в котором открывается существующий файл. | 
| 2 | "w" Режим с включенной записью, который перезаписывает существующий файл или создает новый файл. | 
| 3 | "a" Режим добавления, который открывает существующий файл или создает новый файл для добавления. | 
| 4 | "r+" Режим чтения и записи для существующего файла. | 
| 5 | "w+" Все существующие данные удаляются, если файл существует или создается новый файл с разрешениями на чтение и запись. | 
| 6 | "a+" Режим добавления с включенным режимом чтения, который открывает существующий файл или создает новый файл. | 
Неявные файловые дескрипторы
Неявные файловые дескрипторы используют стандартные режимы ввода / вывода или один файл ввода и один файл вывода. Пример использования неявных файловых дескрипторов показан ниже.
-- Opens a file in read
file = io.open("test.lua", "r")
-- sets the default input file as test.lua
io.input(file)
-- prints the first line of the file
print(io.read())
-- closes the open file
io.close(file)
-- Opens a file in append mode
file = io.open("test.lua", "a")
-- sets the default output file as test.lua
io.output(file)
-- appends a word test to the last line of the file
io.write("-- End of the test.lua file")
-- closes the open file
io.close(file)Когда вы запустите программу, вы получите вывод первой строки файла test.lua. Для нашей программы мы получили следующий результат.
-- Sample test.luaДля нас это была первая строка утверждения в файле test.lua. Также к последней строке кода test.lua будет добавлена строка «- Конец файла test.lua».
В приведенном выше примере вы можете увидеть, как неявные дескрипторы работают с файловой системой, используя методы io. "X". В приведенном выше примере io.read () используется без необязательного параметра. Необязательный параметр может быть любым из следующих.
| Sr. No. | Режим и описание | 
|---|---|
| 1 | "*n" Читает из текущей позиции файла и возвращает число, если существует в этой позиции файла, или возвращает nil. | 
| 2 | "*a" Возвращает все содержимое файла из текущей позиции файла. | 
| 3 | "*l" Считывает строку из текущей позиции файла и перемещает позицию файла на следующую строку. | 
| 4 | number Читает количество байтов, указанное в функции. | 
Другие распространенные методы ввода-вывода включают:
- io.tmpfile() - Возвращает временный файл для чтения и записи, который будет удален после выхода из программы. 
- io.type(file) - Возвращает файл, закрытый файл или ноль на основе входного файла. 
- io.flush() - Очищает выходной буфер по умолчанию. 
- io.lines(optional file name)- Предоставляет общий итератор цикла for, который просматривает файл и закрывает файл в конце, если указано имя файла или файл по умолчанию используется и не закрывается в конце цикла. 
Явные файловые дескрипторы
Мы часто используем явный файловый дескриптор, который позволяет нам управлять несколькими файлами одновременно. Эти функции очень похожи на неявные файловые дескрипторы. Здесь мы используем file: function_name вместо io.function_name. Следующий пример версии файла того же примера неявных файловых дескрипторов показан ниже.
-- Opens a file in read mode
file = io.open("test.lua", "r")
-- prints the first line of the file
print(file:read())
-- closes the opened file
file:close()
-- Opens a file in append mode
file = io.open("test.lua", "a")
-- appends a word test to the last line of the file
file:write("--test")
-- closes the open file
file:close()Когда вы запустите программу, вы получите результат, аналогичный примеру неявных дескрипторов.
-- Sample test.luaВсе режимы открытия файла и параметры чтения для внешних дескрипторов такие же, как и для неявных дескрипторов файлов.
Другие распространенные файловые методы включают:
- file:seek(optional whence, optional offset)- Откуда параметр "set", "cur" или "end". Устанавливает указатель нового файла с обновленной позицией файла от начала файла. В этой функции смещения отсчитываются от нуля. Смещение измеряется от начала файла, если первый аргумент установлен; с текущей позиции в файле, если это "cur"; или с конца файла, если это «конец». Значения аргументов по умолчанию - cur и 0, поэтому текущую позицию в файле можно получить, вызвав эту функцию без аргументов. 
- file:flush() - Очищает выходной буфер по умолчанию. 
- io.lines(optional file name)- Предоставляет общий итератор цикла for, который просматривает файл и закрывает файл в конце, если указано имя файла или файл по умолчанию используется и не закрывается в конце цикла. 
Пример использования метода поиска показан ниже. Он смещает курсор с 25 позиций до конца файла. Функция чтения печатает остаток файла с позиции поиска.
-- Opens a file in read
file = io.open("test.lua", "r")
file:seek("end",-25)
print(file:read("*a"))
-- closes the opened file
file:close()Вы получите результат, подобный следующему.
sample2 test.lua
--testВы можете поиграть со всеми различными режимами и параметрами, чтобы узнать все возможности файловых операций Lua.