Latest web development tutorials

Lua pliku I / O

Lua I / O biblioteki do czytania i przetwarzania plików. Podzielony na prostych wzorów (jak C), pełnym trybie.

  • Tryb prosty (prosty model) posiada aktualny plik wejściowy i aktualny plik wyjściowy i zapewnienia tych operacji związanych z plikami.
  • Tryb pełnoekranowy (kompletnego modelu) przy użyciu zewnętrznego uchwytu pliku do osiągnięcia. To jest w skierowane w postaci przedmiotu, wszystkie operacje, będą określane jako metoda uchwytów plików

W trybie prostym zrobić kilka prostych operacji na plikach, gdy bardziej odpowiednie. Ale po pewnym zaawansowanych operacji plików, prosty model wydaje się być niewystarczające. Na przykład podczas czytania tę operację wiele plików, użyj Pełny tryb jest bardziej odpowiedni.

Zestawienie operacji otwartego pliku jest następująca:

file = io.open (filename [, mode])

Tryb Wartość są:

tryb opis
R Otwarty tylko do odczytu pliku, musi istnieć plik.
w Otwórz plik tylko do zapisu, jeśli plik istnieje, długość plik jest kasowany na 0, to znaczy, że zawartość pliku zniknie. Jeśli plik nie istnieje, utwórz plik.
W dodatkowym pliku tylko do zapisu jest otwarty. Jeśli plik nie istnieje, utworzenie pliku, jeśli plik istnieje, dane zapisu zostaną dodane na końcu pliku, zawartość oryginalnego pliku zostanie zachowana. (Znak EOF zastrzeżone)
R + Zarówno czytanie i pisanie, aby otworzyć plik, musi istnieć plik.
w + Otwarty na odczyt i zapis plików, jeśli plik istnieje, długość pliku zero wątpliwości, że zawartość pliku zniknie. Jeśli plik nie istnieje, utwórz plik.
a + I podobnie, ale jest to plik do odczytu i zapisu
b Tryb binarny, jeżeli jest to plik binarny, można dodać B
+ Znak wskazuje plik może albo czytać i pisać

Tryb prosty

Tryb prosty wykorzystaniem standardu I / O lub użyć bieżącego pliku wejściowego i aktualny plik wyjściowy.

Poniżej znajduje file.lua kod pliku, plik test.lua pracy (jeśli nie trzeba utworzyć plik), w następujący sposób:

-- 以只读方式打开文件
file = io.open("test.lua", "r")

-- 设置默认输入文件为 test.lua
io.input(file)

-- 输出文件第一行
print(io.read())

-- 关闭打开的文件
io.close(file)

-- 以附加的方式打开只写文件
file = io.open("test.lua", "a")

-- 设置默认输出文件为 test.lua
io.output(file)

-- 在文件最后一行添加 Lua 注释
io.write("--  test.lua 文件末尾注释")

-- 关闭打开的文件
io.close(file)

Realizacja powyższego kodu, można zauważyć, że pierwsza linia informacji test.ua plik wyjściowy i ostatni wiersz w pliku dodać lua komentarze. Jestem tu jako wyjście jest:

-- test.lua 文件

W powyższym przykładzie użyto IO "X", w którym io.read (), to nie ma parametrów, parametr może być jednym z poniższej tabeli:

tryb opis
"* N" Wiele jest czytany i powrócił go. Przykład: file.read ( "* n")
"* A" Czytaj cały plik z bieżącej lokalizacji. Przykład: file.read ( "* a")
"* L" (domyślnie) Czyta następną linię na końcu pliku (EOF) co zwraca zero. Przykład: file.read ( "* l")
liczba Zwraca określoną liczbę znaków w łańcuchu lub gdy EOF zwraca nil. Przykład: file.read (5)

Inne metody IO są:

  • io.tmpfile (): zwraca uchwyt do pliku tymczasowego, plik zostanie otwarty w trybie aktualizacji automatycznie usuwane po końce programu

  • io.type (Plik): wykrywanie, czy plik obj uchwyty dostępne

  • io.flush (): write buffer wszystkich danych do pliku

  • io.lines (opcjonalnie nazwa pliku): Zwraca iterator, każde wywołanie dostanie linię w pliku, gdy koniec pliku, zwróci nil, ale nie zamyka plik


Tryb Pełny

Zazwyczaj trzeba uporać się z wielu plików w tym samym czasie. Musimy użyć pliku: nazwa_funkcji zamiast metod io.function_name. Poniższy przykład demonstruje samego pliku w tym samym czasie, jak:

-- 以只读方式打开文件
file = io.open("test.lua", "r")

-- 输出文件第一行
print(file:read())

-- 关闭打开的文件
file:close()

-- 以附加的方式打开只写文件
file = io.open("test.lua", "a")

-- 在文件最后一行添加 Lua 注释
file:write("--test")

-- 关闭打开的文件
file:close()

Realizacja powyższego kodu, można zauważyć, że pierwsza linia informacji test.ua plik wyjściowy i ostatni wiersz w pliku dodać lua komentarze. Jestem tu jako wyjście jest:

-- test.lua 文件

odczyt parametrów zgodnych z trybu uproszczonego.

Inne metody:

  • Plik: seek (opcjonalnie skąd opcjonalnie offset): ustawić i pobrać aktualną pozycję pliku, sukces, zwraca ostateczne położenie pliku (w bajtach), nie nil oraz zwracany jest komunikat o błędzie.Wartości parametrów, skąd mogą być:

    • "Set": Od początku pliku
    • "Cur": Od aktualnej pozycji [domyślnie]
    • "Koniec": począwszy od końca pliku
    • offset: Wartość domyślna to 0
    Bez pliku parametrów: seek () zwraca bieżącą lokalizację pliku: seek ( "set") skierowany jest do nagłówka pliku, plik: seek ( "Koniec"), aby zlokalizować koniec pliku i zwraca rozmiar pliku
  • Plik: flush (): write buffer wszystkich danych do pliku

  • io.lines (opcjonalnie nazwa pliku): otworzyć określonego trybu odczytu pliku Nazwa pliku i zwraca iterator, każde wywołanie złoży linię, gdy koniec pliku, zwróci nil i automatycznie zamyka plik.
    Jeśli parametry taśmowe io.lines () <=> io.input (): linie (); domyślne urządzenie wejściowe, aby odczytać zawartość, ale do końca nie zamyka pliku, takie jak

    for line in io.lines("main.lua") do
    
      print(line)
    
      end
    

W poniższym przykładzie użyto poszukują metod, aby zlokalizować położenie pliku przedostatnie 25 i zastosować metodę odczytu * parametr, przeczytaj cały plik z bieżącej lokalizacji (przedostatnia pozycja 25).

-- 以只读方式打开文件
file = io.open("test.lua", "r")

file:seek("end",-25)
print(file:read("*a"))

-- 关闭打开的文件
file:close()

Mój wynik jest wyjście tutaj:

st.lua 文件末尾--test