Учебники

Lua — File I / O

Библиотека ввода / вывода используется для чтения и управления файлами в 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.