Библиотека ввода / вывода используется для чтения и управления файлами в Lua. В Lua существует два вида файловых операций, а именно неявные файловые дескрипторы и явные файловые дескрипторы.
Для следующих примеров мы будем использовать пример файла test.lua, как показано ниже.
-- sample test.lua -- sample2 test.lua
Простая операция открытия файла использует следующее утверждение.
file = io.open (filename [, mode])
Различные режимы файлов перечислены в следующей таблице.
Sr.No. | Режим и описание |
---|---|
1 |
«р» Режим только для чтения. Это режим по умолчанию, в котором открывается существующий файл. |
2 |
«ж» Режим записи включен, который перезаписывает существующий файл или создает новый файл. |
3 |
«а» Режим добавления, который открывает существующий файл или создает новый файл для добавления. |
4 |
«г +» Режим чтения и записи для существующего файла. |
5 |
«ш +» Все существующие данные удаляются, если файл существует или создается новый файл с разрешениями на чтение и запись. |
6 |
«а +» Режим добавления с включенным режимом чтения, который открывает существующий файл или создает новый файл. |
«р»
Режим только для чтения. Это режим по умолчанию, в котором открывается существующий файл.
«ж»
Режим записи включен, который перезаписывает существующий файл или создает новый файл.
«а»
Режим добавления, который открывает существующий файл или создает новый файл для добавления.
«г +»
Режим чтения и записи для существующего файла.
«ш +»
Все существующие данные удаляются, если файл существует или создается новый файл с разрешениями на чтение и запись.
«а +»
Режим добавления с включенным режимом чтения, который открывает существующий файл или создает новый файл.
Неявные файловые дескрипторы
Неявные файловые дескрипторы используют стандартные режимы ввода / вывода или используют один входной и один выходной файл. Пример использования неявных файловых дескрипторов показан ниже.
-- 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 |
«* п» Читает из текущей позиции файла и возвращает число, если существует в позиции файла или возвращает ноль. |
2 |
«* а» Возвращает все содержимое файла из текущей позиции файла. |
3 |
«* л» Читает строку из текущей позиции файла и перемещает позицию файла на следующую строку. |
4 |
число Читает количество байтов, указанных в функции. |
«* п»
Читает из текущей позиции файла и возвращает число, если существует в позиции файла или возвращает ноль.
«* а»
Возвращает все содержимое файла из текущей позиции файла.
«* л»
Читает строку из текущей позиции файла и перемещает позицию файла на следующую строку.
число
Читает количество байтов, указанных в функции.
Другие распространенные методы ввода / вывода включают в себя:
-
io.tmpfile () — возвращает временный файл для чтения и записи, который будет удален после завершения работы программы.
-
io.type (file) — возвращает ли файл, закрытый файл или ноль на основе входного файла.
-
io.flush () — очищает выходной буфер по умолчанию.
-
io.lines (необязательное имя файла) — предоставляет универсальный итератор цикла, который циклически просматривает файл и закрывает файл в конце, если указано имя файла или файл по умолчанию используется и не закрывается в конце цикла ,
io.tmpfile () — возвращает временный файл для чтения и записи, который будет удален после завершения работы программы.
io.type (file) — возвращает ли файл, закрытый файл или ноль на основе входного файла.
io.flush () — очищает выходной буфер по умолчанию.
io.lines (необязательное имя файла) — предоставляет универсальный итератор цикла, который циклически просматривает файл и закрывает файл в конце, если указано имя файла или файл по умолчанию используется и не закрывается в конце цикла ,
Явные файловые дескрипторы
Мы часто используем явный файловый дескриптор, который позволяет нам манипулировать несколькими файлами одновременно. Эти функции очень похожи на неявные файловые дескрипторы. Здесь мы используем 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 (необязательный fromce, необязательное смещение) — параметр Fromce имеет значение «set», «cur» или «end». Устанавливает новый указатель файла с обновленной позицией файла от начала файла. Смещения в этой функции начинаются с нуля. Смещение измеряется от начала файла, если первый аргумент «установлен»; из текущей позиции в файле, если это «cur»; или из конца файла, если это «конец». Значения аргумента по умолчанию — «cur» и 0, поэтому текущую позицию файла можно получить, вызвав эту функцию без аргументов.
-
file: flush () — очищает выходной буфер по умолчанию.
-
io.lines (необязательное имя файла) — предоставляет универсальный итератор цикла, который циклически просматривает файл и закрывает файл в конце, если указано имя файла или файл по умолчанию используется и не закрывается в конце цикла ,
file: seek (необязательный fromce, необязательное смещение) — параметр Fromce имеет значение «set», «cur» или «end». Устанавливает новый указатель файла с обновленной позицией файла от начала файла. Смещения в этой функции начинаются с нуля. Смещение измеряется от начала файла, если первый аргумент «установлен»; из текущей позиции в файле, если это «cur»; или из конца файла, если это «конец». Значения аргумента по умолчанию — «cur» и 0, поэтому текущую позицию файла можно получить, вызвав эту функцию без аргументов.
file: flush () — очищает выходной буфер по умолчанию.
io.lines (необязательное имя файла) — предоставляет универсальный итератор цикла, который циклически просматривает файл и закрывает файл в конце, если указано имя файла или файл по умолчанию используется и не закрывается в конце цикла ,
Пример использования метода поиска показан ниже. Он смещает курсор от 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.