Jump to content

[PAWN] - Redenumire fisiere / Files rename


Adi007
 Share

Recommended Posts

FILE RENAME

 

Pentru ca pawn nu este atat de dezvoltat in ceea ce priveste controlul fisierelor fara un plugin / include ajutator, am sa va arat cum puteti redenumi un fisier fara sa pierdeti continutul acestuia.

 

Pasul 1: Cream un 'stock', adica o functie pe care o scrieti o singura data si o rulati oriunde in script de cate ori vreti, (in comenzi de exemplu) fara a scrie intreaga functie, ci chemand stock-ul printr-un simplu rand. De obicei stock-urile sunt asezate undeva la sfarsitul scriptului.

stock renamefile(oldpatch[],newpatch[])//Acesta reprezinta randul ce executa functia din interiorul parantezelor, numele stock-ului.
{
//Aici urmeaza sa apara functia ce redenumeste fisierul 
} 

Note:

1. "renamefile" reprezinta numele functiei.

2. Intre cele 2 paranteze rotunde, se afla 2 variabile (ambele sunt string-uri).

3. Pentru ca cele 2 variabile sunt string-uri, vom folosi pentru fiecare cele 2 paranteze patrate ([]).

4. In functia noastra, "oldpatch[]" reprezinta calea catre fisierul ce urmeaza sa fie redenumit, iar "newpatch[]" calea unde se va salva fisierul cu noul nume.

 

Pasul 2 (explicatiile necesare se afla sub forma cometariilor direct pe script (//comentariu):
stock renamefile(oldpatch[],newpatch[]) // Numele stock-ului
{
new File:oldfile = fopen(oldpatch,io_read);//Deschidem fisierul ce urmeaza a fi redenumit (mod citire - io_read)
new File:newfile = fopen(newpatch,io_write);//Deschidem fisierul ce urmeaza a fi scris (cel nou, in mod scriere - io_write)
new character[1], i;//Definim o variabila ce poate gazdui un singur caracter ([1]) si o variabila de manevra, 'i'.
for (i=flength(oldfile);i>0;i--) {//flength ne va arata marimea fisierului in bytes, ceea ce inseamna ca pentru fiecare byte de la numarul total de bytes al fisierului pana la 0, se va executa ceea ce se afla intre acolade. Nota: 1 byte = 1 caracter din fisier.
fputchar(newfile, fgetchar(oldfile, character[0],false),false);//Punem caracter cu caracter din vechiul fisier (numele vechi - oldpatch) in noul fisier (numele nou - newpatch).
}
fclose(oldfile); //Inchidem fisierul cu numele vechi
fremove(oldfile);//Stergem fisierul cu numele vechi
fclose(newfile);//Inchidem fisierul cu numele nou.
}

Cam asta este tot, am efectuat un speed test pentru a nu avea surprize.

Am creat un fisier text avand continut ce ocupa o memorie de 162 MB.

Comanda a fost executata cu succes, redenumind fisierul de 162 MB, in 76 de secunde. Executia am efectuat-o in localhost, in propriul PC care detine un procesor destul de slab.

 

Extra help:

Daca aveti nevoie de o comanda pentru a redenumi un fisier, o puteti folosi pe aceasta:

Nota! Aveti nevoie de ZCMD si SSCANF2 pentru a rula comanda de mai jos.

CMD:rename(playerid,params[])
{    
new oldp[100],newp[100],sr[256];
if(sscanf(params, "s[100],s[100]",oldp,newp)) return SendClientMessage(playerid,-1,"Syntax: /rename <old-patch> <new-patch>");
if(!fexist(oldp)) return SendClientMessage(playerid,-1,"Error, the 'old-path' is missing from the server.");
if(fexist(newp)) return SendClientMessage(playerid,-1,"Error, the 'new-path' already exists on the server.");
renamefile(oldp,newp);
format(sr, sizeof(sr),"You've renamed file %s to %s.", oldp,newp);
SendClientMessage(playerid,-1,sr);
return 1;
}

Cam atat, mai mult ajutor gasiti pe wiki.sa-mp.com.

Ceea ce am prezentat mai sus functioneaza doar pe fisiere ce contin text. Nu veti putea redenumi fisiere de tipul .dll, .exe sau alte extensii complicate.

Edited by RW Adi007
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.