Jump to content
  • 0

pomoc Zápis na začátek souboru


Franta95

Dotaz

Zdravím,
potřeboval bych zjistit způsob jak zapisovat na začátek souboru. Napadlo mě si celý soubor přečíst, uložit do řetězce, na začátek přidal to, co potřebuji a potom znovu zapsat. Ale to je na nic, protože se jedná o logy. Našel jsem funkci fseek, která by měla posunout kurzor v souboru na určitý znak, ale to mi nějak blbne.

 

Jedná se tedy o ukládání logu, když použiju io_append, vše funguje, akorát je to obráceně. Zkoušel jsem to fseek dávat i do cyklu, ale nemělo to žádný vliv.

savePlayerLog(playerid){
	format(infoText, sizeof(infoText), "playerLogs/%s.log", players[playerid][playerName]);
	new File: f = fopen(infoText, io_readwrite);
	fseek(f, 0, seek_start); //tenhle řádek by měl posunout kurzor na začátek souboru
	for (new i = (players[playerid][myLogline] - 1); i >= 0; i --){
 		fwrite(f, playerLogs[playerid][i]);
	}
	fclose(f);
	players[playerid][myLogline] = 0;
}

Pro testování se mi log ukládá po každých 2 řádcích, co hráč napíše a tohle se zapíše do souboru při prvním uložení(vše v pořádku):

[27:10:2015 | 20:47:49] 1
[27:10:2015 | 20:47:36] LOGIN - IP: 127.0.0.1

Druhé uložení(měli by být 4 řádky):

[27:10:2015 | 20:49:8] 2
[27:10:2015 | 20:47:59] /playerlog Franta95
.1

Celkově by to mělo vypadat takhle:

[27:10:2015 | 20:49:8] 2
[27:10:2015 | 20:47:59] /playerlog Franta95
[27:10:2015 | 20:47:49] 1
[27:10:2015 | 20:47:36] LOGIN - IP: 127.0.0.1

Řádky ze serveru jsou správně, protože v modu append vše funguje, akorát se to zapisuje v opačném pořadí(nejnovější řádek je na konci).

Link to comment
Share on other sites

4 odpovědí na tuto otázku

Recommended Posts

  • 0

No takhle. urcite ti jde o to ze ty logy na serveru vypisujes a chces to mit od nejnovejsiho po nejstarsi zejo ?

Kazdopadne to muzes klidne zapisovat do souboru pod sebe ale do dialogu inverzne napr:

new Data[128];
new string[2048];
while(fread(soubor,Data)) format(string,sizeof(string),"%s\n%s",Data,string);
Edited by ATomas
Link to comment
Share on other sites

  • 0

O tom jsem taky přemýšlel, ale co když bude ten log dlouhej a nevejde se mi to do toho stringu. To pak budu muset hledat poslední řádek a když to bude mít třeba 5000 řádků. To pak ten soubor budu muset přečíst 2x - jednou abych našel poslední řádek a potom znova, abych si přečetl posledních 256 řádků(do dialogu). No a načíst to celý třeba do pole mi přijde jako šílenost, kdybych si dal třeba string[10][2048].

Link to comment
Share on other sites

  • 0

O tom jsem taky přemýšlel, ale co když bude ten log dlouhej a nevejde se mi to do toho stringu. To pak budu muset hledat poslední řádek a když to bude mít třeba 5000 řádků. To pak ten soubor budu muset přečíst 2x - jednou abych našel poslední řádek a potom znova, abych si přečetl posledních 256 řádků(do dialogu). No a načíst to celý třeba do pole mi přijde jako šílenost, kdybych si dal třeba string[10][2048].

No ten problem s velikosti stringu budes resit tak jako tak at uz to budes ukladat jakoli. Kazdopadne soubor nemusis cist 2x. Ale souhlasim s tebou, pokud se ti podari zprovoznit inverzni zapisovani tak jakmile vycerpas kapacitu tringu muzes prestat se ctenim souboru. zato u meho zpusobu ho musis vzdy precist cely. Takze tvuj zpusob by byl z hlediska optimalizace lepsi. Ale uprime. je potreba si uvedomit do jake miry se to vyplati. TZN v praxi jak velke logy mas. Ono pokud mas nejak hodne dat uz se vyplati uvazovat o databazi...

Link to comment
Share on other sites

  • 0

Logy nemám zatím moc dlouhý. Udělal jsem to teda tak, že to normálně přidávám na konec souboru, pak přečtu a zobrazim obráceně. Kdybych se v tom už neorientoval, zkusil bych tu databázi, ale to se mi tam zatím nechce patlat. Každopádně moc děkuju za rady a prozatím to je vyřešené.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...