1. sayfa (Toplam 1 sayfa)

Dosya Konumunu Bulmak

Gönderilme zamanı: Pzt Ağu 20, 2018 12:03 am
gönderen Colditz
Merhaba yazar arkadaşlarım,
Dosyaya satır ekleme komutu yapmaya çalışıyorum fakat dosyanın konumunu algılamada sorun yaşıyorum.

Aşağıdaki koda bakalım. Öncelikle filename olan yere dosyamızın konumunu yazıyoruz. Örnek olarak;
"addons/amxmodx/configs/deneme.ini" ve text olan yere ekleyeceğimiz yazıyı yazıyoruz.
Sonradan belirttiğimiz yerde yani "addons/amxmodx/configs/" da geçici bir ini dosyası oluşturuyoruz.
Amacımızın gerçekleşmesi için .ini dosyasının konumunu bulmam gerekiyor.
Filename yerine "addons/amxmodx/deneme.ini" yazdıklarında dosya konumu olarak "addons/amxmodx/" olduğunu bulabilmem gerekiyor.

Kod: Tümünü seç

stock csd_write_file(const filename[], const text[])
{
	new const gecicidosyaismi[] = "gecicidosya.ini";

	// ...
}
Yardımlarınızı bekliyorum.

Dosya Konumunu Bulmak

Gönderilme zamanı: Pzt Ağu 20, 2018 12:10 am
gönderen amad

Kod: Tümünü seç

new yol[81]
get_configsdir(yol, charsmax( yol ))
%s/deneme.ini",yol = addons/amxmodx/configs/deneme.ini

Dosya Konumunu Bulmak

Gönderilme zamanı: Pzt Ağu 20, 2018 12:13 am
gönderen Colditz
Configs dosyasında olmayanlar için ?

Filename i "addons/amxmodx/logs/logver.ini" yaptığımızı düşünelim. Geçici dosyayı configs içine oluşturacak. Maalesef çalışmaz.

Dosya Konumunu Bulmak

Gönderilme zamanı: Pzt Ağu 20, 2018 12:28 am
gönderen Taha Demirbaş
Colditz yazdı: Pzt Ağu 20, 2018 12:13 am Configs dosyasında olmayanlar için ?

Filename i "addons/amxmodx/logs/logver.ini" yaptığımızı düşünelim. Geçici dosyayı configs içine oluşturacak. Maalesef çalışmaz.
Biraz baktım kütüphaneye felan da pek bir şey bulamadım.
Bulamazsan ve çok gerekiyor ise dosya yollarını tek tek tanımlaman lazım oda çok zor iş.

Dosya Konumunu Bulmak

Gönderilme zamanı: Pzt Ağu 20, 2018 12:34 am
gönderen Colditz
Aslında şu durumda yaptım. Fakat oyuncuların uğraşmasını istemediğim için bu şekilde yapmayı düşündüm.
deneme.ini yi gördüğü gibi kesmesi gerekiyor.

Kod: Tümünü seç

stock csd_write_file(const dosyakonumu[], const dosyaismi[], const text[])

Dosya Konumunu Bulmak

Gönderilme zamanı: Pzt Ağu 20, 2018 12:35 am
gönderen amad
get_customdir komutunu bir dene

Dosya Konumunu Bulmak

Gönderilme zamanı: Pzt Ağu 20, 2018 12:36 am
gönderen Colditz
By.Dehset yazdı: Pzt Ağu 20, 2018 12:35 am get_customdir komutunu bir dene
get_customdir komutu uzun zamandır kullanılmayan bir komut ve get_configsdir komutu ile aynı.
Bu komutlar direk addons/amxmodx/configs yerini algılıyor. Benim istediğim şey bu değil.
'filename' e göre dosya konumu kendisi ayarlanacak. Eklentide addons/amxmodx/logs/logs.ini yazdığım zaman otomatik logs klasörüne kadar bulacak yani.

Dosya Konumunu Bulmak

Gönderilme zamanı: Pzt Ağu 20, 2018 1:25 am
gönderen PaZee
containi ile çektir isminde varsa oraya yazdir gibi gibi

Dosya Konumunu Bulmak

Gönderilme zamanı: Pzt Ağu 20, 2018 1:33 am
gönderen Colditz
@PaZee
Mecbur böyle yapacağız artık. Başka bir yöntem yok gibi.

Dosya Konumunu Bulmak

Gönderilme zamanı: Pzt Ağu 20, 2018 7:38 pm
gönderen Colditz
Bu kod güzel bir şekilde dosyaya yazı yazabiliyor fakat bir kere değilde 3-4 kere yazıyor bazen 5-6 kere yazıyor.
10 kere komutu ardarda denediğimde 79023 tane adminlik yazdığını gördüm. Hatayı bulabilir misiniz :D

Kod: Tümünü seç

stock csd_write_file(const filepath[], const filename[], const text[])
{
	new const tempfilename[] = "write_tempfile.ini";

	new fullpath[256];
	formatex(fullpath, charsmax(fullpath), "%s%s", filepath, filename);

	new filepointer = fopen(fullpath, "rt");

	if(filepointer)
	{
		new tempfilepath[256];
		formatex(tempfilepath, charsmax(tempfilepath), "%s%s", filepath, tempfilename);

		new inputfilepointer = fopen(tempfilepath, "wt");

		if(inputfilepointer)
		{
			new filedata[128];

			while(!feof(filepointer))
			{
				fgets(filepointer, filedata, charsmax(filedata));
				trim(filedata);

				fprintf(inputfilepointer, "%s^n%s^n", filedata, text);
			}

			fclose(inputfilepointer);
			fclose(filepointer);

			delete_file(fullpath);
			rename_file(tempfilepath, fullpath, 1);

			return 1;
		}
	}
	else
	{
		set_fail_state("[EasyInclude] %s adli dosya bulunamadi.", fullpath);
	}

	return 0;
}