Dosyadan istediğimiz satırı silerken write_file kullanmak yerine tek bir stock ile bunu daha pratik hâle getirebiliyoruz. İlk başlarda zor gelse de alışınca çok daha kolay olduğunu anlayacaksınız. write_file kullanmamamızın nedeni artık tercih edilmemesidir.
Pawn:
#include <amxmodx>
//Bir şeyleri kayıt ettiğimiz dosyamız (steamid olarak anlatacağım.)
new const g_szFileName[] = "addons/amxmodx/configs/steamid.ini"
//Rastgele bir public üzerinden anlatacağım.
public steamidsildigimizpublic() {
//Burada oluşturduğumuz komutu kullanıyoruz.
//RemoveLine(dosya adı, sileceğimiz bölüm)
RemoveLine(g_szFileName, "STEAM_0:00000000000000");
//Bunu fmt ile de yapabilirsiniz örneğin
//Sunucudaki bütün oyuncuların steamidlerini dosyadan sileceğiz.
//32 lik döngü oluşturup bu RemoveLine komutu kullanacağız.
//Bütün oyuncuları çekmeyi anlatmıştım.
//Authidlerini almak için yeni bir değişken oluşturuyoruz.
for(new pPlayer = 1, szAuthid[MAX_AUTHID_LENGTH]; pPlayer <= MaxClients; pPlayer++) {
if(!is_user_connected(pPlayer)) {
continue;
}
//Authidlerini değere çektik
get_user_authid(pPlayer, szAuthid, charsmax(szAuthid));
//Dosyadan authidsini sildik.
RemoveLine(g_szFileName, szAuthid);
}
}
//Şimdi asıl yere gelelim. Dosyadan yazı silme stocku.
//Stock olarak da kullanabilirsiniz, stocku silip başına bir şey yazmadan da, fark etmez.
stock RemoveLine(const szFileName[], const szOldLine[]) {
//Değerleri aktarmak için yeni bir dosya oluşturacağız.
//Bu dosyanın yeri, kayıt ettiğiniz dosya yeriyle aynı olmalı
//Yani kayıt ettiğiniz dosya addons/amxmodx/configs içindeyse diğeri de orada olmalı.
new const szTempFile[] = "addons/amxmodx/configs/tempfile.ini";
//Kayıt ettiğiniz dosyayı okutuyoruz. Sadece okumak için açtığımız için rt kullanıyoruz.
new iFile = fopen(szFileName, "rt");
if(iFile) {
//Şimdi kayıtlı authidleri kaydedeceğimiz geçici dosyayı oluşturuyoruz ve okutuyoruz.
//Böyle bir dosya olmadığı için kendisi otomatik oluşturacak ve üstüne yazacak, bu yüzden wt
new iTempFile = fopen(szTempFile, "wt");
if(iTempFile) {
//Authidleri çekmek için 128lik yeni bir değişken oluşturuyoruz.
new szBuffer[MAX_FMT_LENGTH];
//Şimdi authidlerin olduğu dosyayı açıp, içindekileri bu değere atıyoruz.
while(fgets(iFile, szBuffer, charsmax(szBuffer))) {
trim(szBuffer);
//Boş satırı ve sileceğimiz authidyi burada boş geçiyoruz.
if(szBuffer[0] == EOS || equali(szBuffer, szOldLine)) {
continue;
}
//Şimdi bu atadığımız değerleri geçici dosyaya aktarıyoruz.
//Satır atlamak için sonuna ^n koyuyoruz yoksa hepsi tek satırda olur.
fprintf(iTempFile, "%s^n", szBuffer);
}
//Şimdi dosyaları kapatıyoruz.
fclose(iFile);
fclose(iTempFile);
//Eski dosyayı siliyoruz
delete_file(iFile);
//Geçici olarak oluşturduğumuz dosyanın ismini eski dosyanın ismiyle değiştiriyoruz.
//Bu sayede dosya ismimiz aynı kalıyor fakat silmek istediğimiz authidyi silmiş oluyoruz.
rename_file(szFileName, szTempFile, 1);
}
}
}