mIRC Dosya İşlemleri: Metin Dosyalarına Yazmak ve Okumak
İçindekiler
Scriptleriniz bazen verileri kalıcı olarak saklamak zorundadır: Bir log kaydı tutmak, kullanıcı listesi oluşturmak, istatistikleri biriktirmek, bir metin havuzundan rastgele cümle seçmek. mIRC dosya işlemleri, bu ihtiyaçları karşılayan komut ve identifier setini sunar. Basit işler için tek satırlık komutlar, büyük dosyalar için ise akış tabanlı yöntemler mevcuttur.
Dosyaya Yazmak: write
write kayit.txt Bu bir satir.
write kayit.txt $asctime - $nick kanala girdi
write komutu, belirtilen dosyanın sonuna bir satır ekler. Dosya yoksa oluşturulur. Bu, log tutmanın en basit yoludur.
Parametrelerle farklı davranışlar elde edilir:
| Parametre | Ne yapar? |
|---|---|
-c | Dosyayı temizleyip yazar |
-dN | N numaralı satırı siler |
-iN | N numaralı satıra ekler |
-lN | N numaralı satırı değiştirir |
-a | Dosyanın sonuna ekler (varsayılan davranış) |
write -c kayit.txt Yeni baslangic
write -l3 kayit.txt Ucuncu satir degistirildi
write -d2 kayit.txt
Satır numaralı işlemler, küçük dosyalarda pratiktir. Büyük dosyalarda ise her işlem dosyanın taranmasını gerektirdiği için yavaş olabilir.
Dosyadan Okumak: $read
//echo -a $read(kayit.txt,1)
//echo -a $read(kayit.txt)
//echo -a $lines(kayit.txt)
Satır numarası verirseniz o satırı, vermezseniz rastgele bir satırı döndürür. Rastgele satır okuma, cevap havuzları ve rastgele mesaj gönderen scriptler için kullanışlıdır.
$read ayrıca arama da yapabilir: Parametrelerle belirli bir metinle başlayan veya eşleşen satırı bulabilirsiniz. Bu, küçük veri dosyalarında arama yapmanın basit yoludur.
Önemli güvenlik notu: $read identifier'ı, okuduğu satırdaki identifier'ları ve değişkenleri değerlendirebilir. Bu, kullanıcıların yazdığı içeriği bir dosyaya kaydedip sonra $read ile okuduğunuzda ciddi bir güvenlik sorununa yol açar: Dosyadaki metin kod olarak çalıştırılabilir. Bu riski önlemek için okuma sırasında değerlendirmeyi kapatan parametreyi kullanmanız gerekir. Güvenlik konusunda ayrıntılar mIRC script güvenliği yazımızda.
Dosya Varlığı ve Bilgileri
if ($isfile(kayit.txt)) { ... }
if ($isdir(veriler)) { ... }
//echo -a Boyut: $file(kayit.txt).size
//echo -a Degistirme: $asctime($file(kayit.txt).mtime)
Bir dosyayı okumadan önce varlığını kontrol etmek, hata mesajlarından kaçınmanın en basit yoludur. $lines var olmayan bir dosyada sıfır döndürür, ancak $read hata üretebilir.
Dosya Yönetimi
remove kayit.txt
rename eski.txt yeni.txt
copy kaynak.txt hedef.txt
mkdir veriler
rmdir veriler
Bu komutlar dosya sistemi işlemleri yapar. remove komutu geri alınamaz; bir dosyayı silmeden önce gerçekten silmek istediğinizden emin olun. Scriptinizin kullanıcı girdisine dayalı olarak dosya silmesine izin vermek çok tehlikelidir.
Akış İşlemleri: fopen ve fwrite
Büyük dosyalarla çalışırken her satır için dosyayı açıp kapatmak verimsizdir. Akış komutları, dosyayı bir kez açıp birçok işlem yapmanızı sağlar:
alias kayit_yaz {
.fopen -o kayit kayit.txt
var %i = 1
while (%i <= $nick($chan,0)) {
.fwrite kayit $nick($chan,%i)
inc %i
}
.fclose kayit
}
| Komut | Ne yapar? |
|---|---|
fopen | Dosyayı açar (okuma veya yazma modunda) |
fwrite | Açık dosyaya yazar |
fseek | Dosya içinde konum değiştirir |
fclose | Dosyayı kapatır |
$fread | Açık dosyadan okur |
$feof | Dosya sonuna gelindi mi |
$fopen().err | Hata durumu |
Akış işlemlerinde en önemli kural, dosyayı mutlaka kapatmaktır. Açık kalan bir dosya hem kaynak tutar hem de başka işlemlerin o dosyaya erişmesini engelleyebilir. Bir hata durumunda da kapatma yapılacağından emin olun.
Büyük Dosyaları Okumak
Bir dosyanın bütün satırlarını işlemek gerektiğinde iki yöntem vardır. Satır numaralı okuma basittir ama her çağrıda dosya taranır; binlerce satırlı bir dosyada bu çok yavaştır. Akış tabanlı okuma ise dosyayı bir kez açıp sırayla ilerler ve çok daha hızlıdır.
Pratik bir kural: Birkaç yüz satıra kadar satır numaralı okuma yeterlidir; daha büyük dosyalarda akış kullanın. Çok büyük dosyaları işlerken mIRC'in donmasını önlemek için işlemi zamanlayıcıyla parçalara bölmek gerekebilir; bkz. mIRC timer.
Dosya Yolları ve Taşınabilirlik
Dosya yollarını yazarken scriptinizin başka bilgisayarlarda da çalışmasını düşünün:
var %dosya = $scriptdirveriler\kayit.txt
var %dosya2 = $mircdirlogs\kanal.log
$scriptdir ve $mircdir identifier'ları sonunda ters eğik çizgiyle gelir, bu yüzden doğrudan dosya adı eklenebilir. Sabit yollar yazmak, scriptinizi paylaşılamaz hâle getirir.
Kendi veri klasörünüzü oluşturmak da iyi bir uygulamadır: Scriptinizin dosyaları mIRC klasöründe dağınık durmaz, kullanıcı hangi dosyaların sizin scriptinize ait olduğunu bilir ve scripti kaldırmak istediğinde temizlemesi kolay olur.
Güvenlik Önlemleri
Dosya işlemleri, scriptlerin en riskli alanıdır. Birkaç temel kural:
- Kullanıcı girdisini dosya yoluna koymayın. Bir kullanıcının yazdığı metni dosya adı olarak kullanmak, sistemdeki başka dosyalara erişilmesine yol açabilir.
- $read'de değerlendirmeyi kapatın. Kullanıcı içeriği barındıran dosyaları okurken bu zorunludur.
- Silme işlemlerini sınırlayın. Scriptinizin yalnızca kendi dosyalarını silmesine izin verin.
- Yazma yetkisini kontrol edin. Sistem klasörlerine yazmaya çalışmayın.
- Dosya boyutunu izleyin. Sürekli büyüyen log dosyaları diski doldurabilir; düzenli temizlik veya boyut sınırı ekleyin.
Log Dosyası Yönetimi
Script yazarken en sık yapılan dosya işlemi log tutmaktır. İyi bir log sistemi için:
- Tarih bazlı dosyalar: Her gün veya her ay için ayrı dosya kullanmak, dosyaların aşırı büyümesini önler ve arama yapmayı kolaylaştırır.
- Zaman damgası: Her satırın başına tarih ve saat yazmak, kayıtları sonradan incelerken vazgeçilmezdir.
- Boyut sınırı: Belirli bir boyutu aşan dosyayı arşivleyip yeni dosya başlatmak.
- Temizlik: Belirli bir süreden eski dosyaları silmek.
- Gizlilik: Kanal sohbetlerini kaydediyorsanız bu verilerin kişisel olduğunu unutmayın; gereğinden uzun saklamayın.
Gerçek Bir Senaryo
Bir kullanıcı, kanalındaki bütün mesajları tek bir dosyaya kaydeden bir script yazıyor. Altı ay sonra dosya yüz megabaytı geçiyor; dosyada arama yapmak imkânsız hâle geliyor ve script her mesajda dosyayı açıp kapattığı için mIRC yavaşlıyor. Kullanıcı sistemi yeniden tasarlıyor: Her gün için ayrı dosya oluşturuyor, dosya adında tarihi kullanıyor, akış komutlarıyla dosyayı açık tutuyor ve otuz günden eski dosyaları otomatik siliyor. Hem performans düzeliyor hem de belirli bir güne ait kayıtları bulmak saniyeler sürüyor.
Dosya Biçimi Seçmek
Bir veriyi dosyada saklayacağınızda hangi biçimi kullanacağınıza karar vermeniz gerekir. Satır satır büyüyen kayıtlar, örneğin loglar veya basit listeler, düz metin dosyası için idealdir. Her satırda birden fazla bilgi tutmanız gerekiyorsa bir ayırıcıyla birleştirmek ve okurken token identifier'larıyla ayırmak pratik bir çözümdür. Bölümlere ayrılmış yapılandırma verileri için ini biçimi daha uygundur.
Biçim seçerken dosyayı kimin okuyacağını da düşünün. Yalnızca scriptiniz okuyacaksa biçim tamamen size kalmıştır. Kullanıcı da inceleyecekse okunabilirlik önemlidir: Zaman damgaları anlaşılır biçimde yazılmalı, alanlar hizalı durmalı ve dosyanın başına kısa bir açıklama eklenmelidir.
Sonuç
Dosya işlemleri, scriptlerinize kalıcı hafıza kazandırır. Basit işler için write ve $read, büyük dosyalar için akış komutlarını kullanın, dosya varlığını kontrol edin, yolları taşınabilir yazın ve güvenlik kurallarına özellikle dikkat edin. Zamanlanmış işler için sıradaki rehberimiz mIRC timer.
IRC sorunun mu var? Kanalda birlikte çözelim.
💬 Kanala BağlanSıkça Sorulan Sorular
Dosyaya satır eklemek için hangi komut kullanılır?
write komutu dosyanın sonuna satır ekler. Belirli bir satırı değiştirmek için satır numarası parametresi kullanılır.
Büyük dosyaları nasıl okumalıyım?
Satır satır okumak için akış komutlarını veya satır numaralı okuma kullanın; dosyanın tamamını belleğe almaktan kaçının.
Dosya yolu yazarken neye dikkat etmeliyim?
Sabit yollar yerine mircdir veya scriptdir identifier'larını kullanın; kullanıcı girdisini dosya yoluna doğrudan eklemeyin.


