-
Sziasztok!
Szeretném meghatározni, hogy egy mappában milyen fájlok vannak. (Felhasználók)
Ehhez a FileManager nevû plugint használnám. (http://forum.sa-mp.com/showthread.php?t=92246)
A példa kód a listázásra így néz ki:
new dir:dHandle = dir_open(\"./\");
new item[40], type;
while(dir_list(dHandle, item, type))
{
if(type == FM_FILE) printf(\"%s is a file\", item);
else if(type == FM_DIR) printf(\"%s is a directory\", item);
}
dir_close(dHandle);
Ezt kicsit átalakítottam, és most így néz ki a kód:
#include <a_samp>
#include <filemanager>
#include <Dini>
public OnFilterScriptInit()
{
new dir:dHandle = dir_open(\"./scriptfiles/ladmin/users/\");
new item[255], type;
while(dir_list(dHandle, item, type))
{
if(type == FM_FILE)
{
if(dini_Exists(item))
{
printf(\"%s\", item);
dini_IntSet(item,\"money\",0);
}
}
}
dir_close(dHandle);
return 1;
}
Azt szeretném megcsinálni, hogy minden játékos pénzét átírni 0-ra. Viszont az a problémám, hogy nem írja át. printf-el kiírná azoknak a nevét, akiket lenullázott, viszont a módosításom után semmit sem ír ki, és nem is nyúl a fájlokhoz. :S
Valaki tudna segíteni, mi lehet a probléma?
Dupla hozzászólás automatikusan összefûzve. ( 2013. szeptember 17. - 14:03:55 )
Ezzel a kóddal kilistáz minden fájlt a mappában, csak nem tudom hogy tudnék rá hivatkozni a késõbbiekben. (például fájlból olvasáskor.)
#include <a_samp>
#include <filemanager>
public OnFilterScriptInit()
{
new dir:dHandle = dir_open(\"./scriptfiles/ladmin/users/\");
new item[40], type;
while(dir_list(dHandle, item, type))
{
if(type == FM_FILE)
{
printf(\"%s\", item); // Az \"item\" a fájl neve, XYZ.sav formátumban.
}
}
dir_close(dHandle);
return 1;
}
Próbáltam fájlkezelõben az \"item\"-re hivatkozva megnyitni minden fájlt, és átírni a \"money\" értéket 0-ra, viszont valamiért nem listázza ki, ha elé teszem a \"if(dini_Exists(item))\"-t.
-
Másolj már be egy olyan részt is amit az \"item\" változód tartalmaz.
-
Amikor kilistázza, akkor például ezeket írja ki:
1997.sav
@nth0n1.sav
Andreas_00Sin.sav
asdsad.sav
_05HUN_06user.sav
Az item változó takarja a felhasználó fájlok neveit. (Viszont amikor rá akarok hivatkozni nem csinál semmit. :/)
-
Ne sav -ban/ben mensd hanem txt -ben/ban, és akkor meg tudod nyítni..
-
Kipróbáltam .txt kiterjesztéssel, és úgy sem mûködik. :S
Amit kiír a szerver printf-el (\"item\"-et):
1997.txt
@nth0n1.txt
Andreas_00Sin.txt
asdsad.txt
_05HUN_06user.txt
És így sem írja át :/
Viszont amit nem értek, az a következõ:
#include <a_samp>
#include <filemanager>
#include <Dini>
public OnFilterScriptInit()
{
new dir:dHandle = dir_open(\"./scriptfiles/ladmin/users/\");
new item[255], type;
while(dir_list(dHandle, item, type))
{
if(type == FM_FILE)
{
if(!dini_Exists(item))
{
printf(\"%s\", item);
dini_IntSet(item,\"money\",0);
}
}
}
dir_close(dHandle);
return 1;
}
Ennél a kódnál ha ez szerepel: \"if(!dini_Exists(item))\" akkor kilistázza a fájlokat, viszont ha ez: \"if(dini_Exists(item))\" akkor nem. Tehát ha létezik a fájl nem listázza ki, ha meg létezik akkor igen?! Akkor ez most hogy van? :/
-
Ennyibõl nem veszed észre mi a hiba? ;D
Fájl nevekkel tér vissza az item, hiszen látod.
A dini_Exist az honnan tudja hogy kettõ mappán belül keresse a megadott fájlokat (/ladmin/users/...)?
-
Oh én hülye.. Erre nem is gondoltam! :/
Köszönöm szépen a válaszokat! Így már mûködik! :)
A végleges kódot kiteszem, akinek szüksége van rá, használja egészséggel! :)
#include <a_samp>
#include <filemanager>
#include <Dini>
public OnFilterScriptInit()
{
new dir:dHandle = dir_open(\"./scriptfiles/ladmin/users/\");
new item[255], type;
while(dir_list(dHandle, item, type))
{
if(type == FM_FILE)
{
new file[255]; format(file, sizeof(file), \"ladmin/users/%s\",item);
if(dini_Exists(file))
{
printf(\"%s\", file);
dini_IntSet(file,\"money\",0);
}
}
}
dir_close(dHandle);
return 1;
}