Skocz do zawartości

Praca na plikach


Muzzik
# CSH External VIP Project

Masz dosyć problemów z czynnikiem zaufania w CS2 lub notorycznymi banami?

Sprawdź CSH External VIP Project.


Więcej informacji  

Rekomendowane odpowiedzi

Zaczne od najprostrzej funkcji do logowania przebiegu pracy naszego pluga:

 

log_to_file( const file[], const message[], [ ... ] )

 

Funkcja sklada sie z 2 czesci:

- Nazwa pliku (opcjonalnie sciezka) - przy nie podaniu sciezki zostanie stworzony(zapisany do) plik o podanej nazwie w folderze amxmodx/logs

 

Jesli chcemy by kazdy dzien mial osobny plik oraz by mozna bylo latwo je rozroznic musimy odpowiednio sformatowac nazwe pliku:

 

 

new file[32],Time[7]
        get_time("%d%m%y",Time,8)
        format(file,31,"TEST_%s.log",Time)
        log_to_file(file,"Test log")

 

W efekcie zostanie kazdego dnia tworzony plik lub zapis do istniejacego pliku o podajen nazwie. W tym przypadku powstal by plik TEST_170409.log

 

Specyfikacjie funkcji get_time KLIK!

 

 

- Druga czesc sklada sie z informacji ktora chcemy wpisac do pliku.

 

Na poczatku kazdego nowego wpisu beda informacje typu data - godzina (nie musimy sami formatowac tej czesci):

 

 

L 04/17/2009 - 12:38:11:

 

Tekst ktory bedziemy wprowadzac do pliku mozna formatowac tak jak w funkcji Format np:

 

public plugin_init() {
        register_plugin(PLUGIN, VERSION, AUTHOR)        
        register_clcmd("say /log","test")
}

public test(id)
{
        new name[32],ip[32],sid[64]
        get_user_name(id,name,31)
        get_user_ip(id,ip,31,1)
        get_user_authid(id,sid,63)
        log_to_file("file.txt","Gracz %s %s %s - napisal /log",name,ip,sid)
}

 

Teraz podam 3 czesto niezbedne funkcje do pracy na plikach, ale nie wystarczajace by cokolwiek wpisac/pobrac z pliku:

 

get_basedir( name[], len ) - sciezka do folderu .../amxmodx/

get_configsdir( name[], len ) -sciezka do folderu .../amxmodx/config/

get_datadir( name[], len ) - sciezka do folderu .../amxmodx/data/

 

Pierwszy parametr to nazwa tablicy, a drugu to ilosc elementow ktore mozna uzyc (o 1 mniej niz liczba przy deklarowaniu tablicy). Dzieki tym funkcja jestesmy w stanie zawsze zapisac plik w tym samym miejscu na serwerze niezaleznie na jakim jest on robiony.

 

Kolejne przydatne funkcje:

 

file_exists ( const file[] ) - sprawdza czy istnieje plik o podanej nazwie i sciezce

dir_exists ( const dir[] ) - sprawdza czy podana sciezka istnieje. Jesli np. nie ma folderu w ktorym chcemy zapisac dane wystarczy go stworzyc:

mkdir ( const dirname[] ) - tworzy folder o podanej nazwie i sciezce

 

file_size ( const file[], [ flag ] ) - sprawdza rozmiar pliku:

- gdy flaga to liczba 0 to funkcja zwraca liczbe Bitow pliku

- gdy flaga to liczba 1 to funkcja zwraca liczbe lini w pliku

Teraz najpodstawowsze 2, moim zdaniem najbardzej przydatne funkcie do pracu na plikach:

 

read_file ( const file[], line, text[], len, &txtLen ) - funkcja do czytania danych z pliku

 

- pierwszy parametr to nazwa pluku i sciezka do niego (trzeba go sformatowac za pomoca w/w funkcji)

- drugi parametr to nr. lini ktora chcemy czytac - pierwsza linia w pliku jest linia o numerze 0. Sama funkcja zwraca kolejna dostepna linie jesli jest dostepna lub 0 gdy czytana linia jest ostatnia linia w pliku

- trzeci parametr to tablica w ktorej beda przechowywane dane z podanej wczesniej lini pliku

- czwarty parametr to maksymalna ilosc danych ktore mozemy przechowywac w tablicy (1 mniej niz liczba podana przy deklaracji)

- ostatni, piaty parametr zwraca ilosc znakow ktore zostaly pobrane do tablicy (jesli naprzyklad tablica ma rozmiar 512 a pobralismy tylko 17 znakow, to w tej zmiennej bedzie przechowywana informacia ile znakow tablicy jest dla nas wazne).

 

Przyklad petli ktora bedzie czytac kazda linie pliku a nastepnie wykonywac "TWOJ KOD"

 

 

new line=0, file, text[128],chars
        do{
                line = read_file(file,line,text,127,chars)
                /*
                TWOJ KOD
                */
        }
        while(line!=0)

 

Petla do while bedzie wykonywana do momentu gdy funkcja read_file zwroci liczbe 0 czyli dojdzie do konca pliku. Jesli szukamy konkretnej informacji w pliku, ktora sie znajduje w tylko 1 linki kodu, to po jej znalezieniu mozemy przerwac funkcjie za pomoca "break" dzieki temu mozemy za petla zapisac informacjie w ktorej lini znajduje sie np. dana mapa. Zapisana linia moze byc pozniej przydatna do aktualizacji danych.

 

 

write_file ( const file[], const text[], [ line ] ) - funkcja zapisuje informacje do podanego pliku lub go tworzy

 

- Pierwszy parametr to nazwa pliku i sciezka do niego (trzeba go odpowiednio sformatowac).

- Drugi paramert to tablica znakowa ktora przechowuje dane ktore chcemy zapisac do pliku. Jesli nic nie wpiszemy to linia bedzie pusta - funkcja write_file nie dodaje wlasnego tekstu do zapisywanego pliku

- Trzeci parametr to nr. lini w ktorej ma byc zapisana informacja linie sie zaczynaja od nr.0 - podajac konkretna linie, informacje ktore sa w niej przechowywane zostana usuniete i w danej lini zostana wprowadzone nasze nowe dane. Jesli paramet line bedzie rowny -1 to tekst bedzie zapisany na koncu pliku, bez nadpisywnia zadnych danych.

 

 

 

Uwagi:

- moga wystapic problemu w pracy na plikach na serwerach na ktorych chmod nie pozwala amxx'owi na zapis/czytanie/tworzenie plikow

- moga wystapic problemy przy formatowaniu sciezki na rozych systemach operacyjnych ( linux i windows rozdzielaja foldery za pomoca / oraz - mozna sprawdzic typ serwera za pomoca funkcji is_linux_server())

- tutorial zostal napisany na bazie "AMX Mod X Function Reference" oraz mojego doswiadczenia w tej dziedzinie. Podany kod nie moze stanowic samodzielnego pluga, trzeba go dostosowac do wlasnych potrzeb.

- Jesli sa pytania/uwagi prosze pisac w tym temacie

 

 

Źródło amxx.pl Twórca: Miczu - Przeglądanie profilu - AMXX.pl: Support AMX Mod X

Zapraszam na mojego twittera:

@Muzzikx

Odnośnik do komentarza

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Regulamin. Polityka prywatności