Ana Sayfa » Ders Notları ve Örnekler » ASP.NET » Dosyaya Metin Yazma - StreamWriter Sınıfı, MapPath ve Encoding

Uyarılar :
  • Bu sayfada yazılanlar yeniden yayınlanamaz.
  • Bu örnek ders sırasındaki anlatımlardan derlenmiştir. Özellikle bir makale şeklinde yazılmamıştır. Bilgilerde eksiklikler bulunabilir.

Örnek :

<%@ Page Language="vb" %>
<!-- Dosyalama ile ilgili sınıfları kullanmak için aşağıdaki System.IO isim alanını
burada bildiriyoruz. Bir isim alanı burada bildirilmediğinde bu isim alanında bulunan
bir sınıfı (Örneğin System.IO isim alanındaki StreamWriter sınıfını) kullanmamız
gerektiğinde sınıf adını bulunduğu isim alanı ile beraber yazmamız gerekir (Örneğin
Dim sw As System.IO.StreamWriter) -->

<%@ Import Namespace="System.IO" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    void Page_Load(Object o, EventArgs e)
    {    
        /*
        .NET Framework'da dosya oluşturmak için bir çok sınıf mevcuttur. Bunlardan
        StreamWriter sınıfı ile aşağıdaki şekilde bir dosya (veya akış / stream*)
        oluşturabiliriz. Bu sınıfın birkaç kullanım şekli vardır. Kullanılan dilin
        karakterleri ile ilgili sorun çıkmaması için aşağıdaki şekli tercih edebiliriz.
        Bu kullanım şeklinde, birinci parametre oluşturulacak sayfanın
        mutlak adresi / yolu (path) ve adı, ikinci parametre dosya mevcut ise ekleme
        yapılıp yapılmayacağı (false = yeniden oluştur / yoksa oluştur,
        true = varsa ekle / yoksa oluştur), üçüncü parametre ise dil kodlamasıdır.
        */
        
        /*
        Server.MapPath, verilen göreceli adresin (bu sayfanın konumuna göre
        vereceğimiz adresin) mutlak adresini döndürür. Mutlak adres, yerel bir
        (Windows yüklü) bilgisayar veya sunucu için sürücü harfi ile başlar.
        Yani bizim abc/def.txt şeklinde verdiğimiz bir göreceli adresin
        (busayfanın bulunduğu klasördeki abc klasörünün içindeki
        def.txt isimli dosya) mutlak adresi, sitemizin bulunduğu klasörün
        d:\siteler\benimsite olduğunu kabul edersek
        c:\siteler\benimsite\abc\def.txt'dir. 
        */

        /*
        Örneğimizde kullandığımız ~ (tilde) işareti sunucudaki web sitemizin
        bulunduğu ana klasöre işaret eder. Sitemizin sunucuda bulunduğu klasörün
        d:\siteler\benimsite olduğunu kabul edersek, aşağıdaki Server.MapPath("~/deneme.htm")
        ifadesi bize "d:\siteler\benimsite\deneme.htm" şeklinde bir mutlak adres döndürecektir.
        */
        
        /*
        UTF8 kodlama evrensel kodlama (unicode) biçimlerinden birisidir. Bu kodlama ile
        Türkçe karakterler dahil bir çok özel karakter ve çeşitli dillerin karakterleri
        görüntülenebilir veya dosyaya yazılabilir. Sadece Türkçe karakterler ve diğer
        latin karakterleri doğru biçimde görüntülenmek isteniyorsa buraya
        System.Text.Encoding.GetEncoding("iso-8859-9") yazılabilir. Ancak UTF8 tavsiye edilir.
        */

        StreamWriter sw = new StreamWriter(
                                            Server.MapPath("~/deneme.htm"),
                                            false,
                                            System.Text.Encoding.UTF8
                                          );
        
        /*
        StreamWriter sınıfının WriteLine metodu, dosyaya (veya akışa), parametre olarak
        bildirilen değeri (burada karakter katarı / karakter dizesi / string) sonuna
        bir satır sonu işareti ekleyerek yazdırır. Dolayısıyla dosyamıza bir satır
        eklemiş oluruz. Satır eklemeden yazdırmak için Write metodu kullanılabilir.
        */

        /*
        Örneğimizde dosyamıza HTML etiketlerinden oluşan metinleri satırlar halinde ekliyor
        ve bir HTML belgesi oluşturuyoruz.
        */
        
        sw.WriteLine("<html>");
        sw.WriteLine("<head><title>Deneme Sayfası</title></head>");
        sw.WriteLine("<body>");
        sw.WriteLine("<b>HTML metni</b>");
        sw.WriteLine("</body>");
        sw.WriteLine("</html>");
        
        /*
        StreamWriter sınıfının Flush metodu, arabellekte bekletilen ve akışa
        (örneğimizde oluşturulacak dosya) gönderilecek verilerin ara bellekten
        boşaltılması için kullanılır. Bu da garanti olmasada yaz dediklerimizin
        fiziksel olarak dosyaya bir an önce yazılmasını sağlar.
        */

        sw.Flush();
        
        /*
        Açtığımız akışı veya dosyayı işimiz bitince hemen kapatmalıyız.
        */
        
        sw.Close();
		
        ltMesaj.Text = "<h3>\"" +
                       Server.MapPath("~/deneme.htm") +
                       "\" dosyası oluşturuldu...</h3>";
		
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">

    <asp:Literal id="ltMesaj" runat="server" EnableViewState="false" />

    </form>
</body>
</html>

<!--
Akış (stream), bilgisayarda ağdan (yerel ağ, Internet vs.) veya fiziksel bir
sürücüden gelen (hafızaya alınan bir dosya) bit veya bayt silsilelerine
verilen isimdir. Bu silsileler çoğunlukla eş zamanlı değildir ve çok çeşitli
kaynaklardan (diskten, ağdan, tarayıcıdan ...) gelebilir veya bu kaynaklara gidebilir.
-->
İletişim : hazirsite@gmail.com