Osman KURT

Yazılım Uzmanı | MVC Eğitmeni

ASP.Net de Dosyaların İçeriğini Okuma Değiştirme ve Kaydetme

Bu yazımda asp.net projelerimizde hiçbir şekilde ftp ye müdahale etmeden belirlediğimiz dosyalar üzerinde değişiklik yapma imkanı sağlayan kod bloğumuzu göstereceğim. Bu kod bloğunun bize şöyle faydası olabilir. Bitmis bir proje üzerinde ani bir değişiklik yapma durumumuz oldu diyelim. Ne yapıcaz? Ftp bilgilerininde olmadığını varsayarsak daha önceden projemize entegre ettiğimiz bir sayfada listeden değişiklik yapacağımız sayfayı seçmek suretiyle sayfa üzerinde her türlü değişikliği yapabiliriz.

Kod bloğumuz alt kısımda ki gibidir.

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            DirectoryInfo dosyalar = new DirectoryInfo(Server.MapPath("~/"));
            Repeater1.DataSource = dosyalar.GetFiles("*.htm");
            Repeater1.DataBind();
            if (Request.QueryString["degistir"] != null)
            {
                duzeltme.Visible = true;
                string degistirilecek = Request.QueryString["degistir"];
                StreamReader oku = new StreamReader(Server.MapPath("~/" + degistirilecek), System.Text.Encoding.Default);
                TextBox1.Value = oku.ReadToEnd();
                oku.Close();
                oku.Dispose();
            }
        }
    }
    protected void Button_kaydet_Click(object sender, EventArgs e)
    {
        string yazilacak = Request.QueryString["degistir"];
        StreamWriter yaz = new StreamWriter(Server.MapPath("~/" + yazilacak), false, System.Text.Encoding.Default);
        yaz.Write(TextBox1.Value);
        yaz.Close();
        yaz.Dispose();
        Label1.Text = "Değiştirme Başarılı.";
    }


Görüşmek Üzere

Osman KURT

Yazılım Geliştirici ve Grafiker

ASP.Net Dosya İşlemeleri

Dosya İşlemleri

Bir ASP.NET uygulamasında dosya sınıfını kullanarak dosyalara erişip, bu dosyalar üzerinden işlem yapmak mümkündür.


Bir ASP.NET uygulamasında dosya sınıfını kullanarak dosyalara erişip, bu dosyalar üzerinden işlem yapmak mümkündür.  Bu işlemler ; dosya oluşturmak, silmek, taşımak, kopyalamak ve bu dosyaları okuyup üzerine yazıp, dosya özelliklerini görebilmektir.
Bu işlemleri yapabilmek için sayanıza  System.IO uzayını eklememiz gerekmektedir.
Dosya Silme
Bir dizin altındaki dosyayı silmek için Delete() metodu kullanılır.
File.Delete(silinecek olan dosyanın yolu)
Silinecek olan dosyanın  yolu fiziksel yol yada  Server.MapPath() kullanarak göreceli yol olarak belirtilebilir.
File.Delete("c:\Projeler\Resimler\aslan1.jpg");
File.Delete(Server.MapPath("../Resimler/aslan.jpg"));
Dosyanın Olup Olmadığını Kontrol Etmek
Bir dosya üzerinde işlem yapmadan önce dosyanın olup olmadığını kontrol etmek isteyebilirsiniz.  Bir dosyayı silmek istendiğinde dosya yoksa çalışma zamanı hatası alınır. File.Exists()  metodu dosyanın olup olamdığını kontrol etmek için kullanılır.
File.Exists(kontrol edilecek olan dosyanın yolu)
Bu metot dosyanın durumuna göre True ya da False döndermektedir.  Aşağıdaki kod önce dosyanın olup olmadığını kontrol edip, dosya varsa silme işlemini gerçekleştirmektedir.
if(File.Exists("Dosya yolu"))
{
  File.Delete("Dosya yolu");
}

Dosya Taşıma
Bir dosyayı bir yerden başka bir yere taşımak mümkündür. Bunun için File.Move() metodu kullanılır.
File.Move("hedef dosya","taşınacak yer");
Hedef dosya taşımak istediğiniz dosyanın yoludur. Taşınacak yer ise dosyanızın taşınacağı yerdir. Eğer hedef dosyanız yoksa ya da taşıyacağınız yerde aynı dosyadan var ise hata alırsınız. Aşağıdaki kod önce taşınacak olan dosyanın olup olmadığını ve taşınacak olan yerde taşınacak dosyadan olup olmadığını kontrol edip, koşullar uygunsa dosya taşınmaktadır.
if((File.Exists(@"c:\Resimler\ozlem.JPG")) && (!File.Exists(@"c:\Resimler2\ozlem.JPG")))
    
{
  File.Move(@"c:\Resimler\ozlem.JPG",@"c:\Resimler2\ozlem.JPG");
}

Dosyayı bir yere taşırken farklı bir isim verirseniz, dosya taşınırken farklı bir isimle taşınmaktadır.
if((File.Exists(@"c:\Resimler\ozlem.JPG")) && (!File.Exists(@"c:\Resimler2\ben.JPG")))
    
{
  File.Move(@"c:\Resimler\ozlem.JPG",@"c:\Resimler2\ben.JPG");
}

Yukarıdaki kod ile ozlem isimli dosya resimler2 dosyasına ben olarak taşınmaktadır.
Dosya Kopyalamak
Dosyalar bir klasörden başka bir klasöre File.Copy() kullanılarak kopyalanabilmektedir.  Copy() metodu ile Move metodunda olduğu gibi dosyalar silinmemektedir.
File.Copy("Hedef dosya","Taşınacak yer");
if((File.Exists(@"c:\Resimler\ozlem.JPG")) && (!File.Exists(@"c:\Resimler2\ozlem.JPG")))
    
{
   File.Copy(@"c:\Resimler\ozlem.JPG",@"c:\Resimler2\ozlem.JPG");
}


Dosya Özellikleri
Dosyalara ait bazı özellikleri öğrenebilmek mümkündür.
GetCreationTime() : Bu metot  dosyanın oluşturulduğu zaman ve tarihi vermektedir.
GetLastAccessTime(): Bu metot dosyaya en son girilen zaman ve tarihi vermektedir.
GetLastWriteTime(): Bu metot dizindeki dosyaya en son yazılan zaman ve tarihi vermektedir.
File.GetCreationTime("Dosya Yolu");
File.GetLastAccessTime("Dosya Yolu");
File.GetLastWriteTime("Dosya Yolu");

ASP.NET 2.0 ile Metin Dosyalarını Okuma ve Yazma
   
StreamReader ve StreamWriter sınıflarını kullanarak; ASP.NET 2.0 da text dosyalarını okuma ve yazma işlemini gösteren basit bir uygulama.
   
Bu makalede StreamReader ve StreamWriter sınıflarını kullanarak; ASP.NET 2.0 da text dosyalarını okuma ve yazma işlemini gösteren basit bir uygulama yapacağız. Dil olarak C# kullandım ama kolaylıkla diğer dillere de çevirebilirsiniz.
   
Herhangi bir text dosyasını System.IO.StreamReader sınıfını kullanarak; bir Textbox kontrolü içinde okumak için aşağıda verdiğim kodu kullanın:
   
System.IO.StreamReader StreamReader1 = new System.IO.StreamReader(Server.MapPath("test.txt"));
TextBox2.Text = StreamReader1.ReadToEnd();
StreamReader1.Close();
   
   
if (System.IO.File.Exists(Server.MapPath("test.txt")))
   
System.IO.StreamWriter sınıfını kullanarak; Textbox kontrolünün içeriğini, bir text dosyasına yazmak için aşağıda verdiğim kodu kullanın:
   
System.IO.StreamWriter StreamWriter1 = new System.IO.StreamWriter(Server.MapPath("test.txt"));
StreamWriter1.WriteLine(TextBox1.Text);
StreamWriter1.Close();

   
Yukarıdaki örnekte StreamWriter sınıfı, eğer dosya daha önceden yaratılmamışsa bir dosya yaratacak; ve eğer yaratılmışsa üzerine yazacak.
   
"\r\n" ekleyerek; text dosyanızda satır başı oluşturabilirsiniz. Kod tarafından satır başı ekleme aşağıdaki kodu kullanarak yapılabilir:
   
StreamWriter1.WriteLine("Some text on line1.\r\nSome text on line2.");
   
Aşağıdaki örnek kod, iki textbox kontrolü içeren bir web sayfasıdır. Üstteki textbox ı düzenleyin ve kayıt butonuna tıklayın. Text dosyası üstteki textbox ın içindeki yazıyı kullanarak yaratılacaktır ve web sayfası ile aynı sanal dizine kaydedilecektir. Yeni oluşuturulan text dosyası daha sonra alttaki textbox içine daha önceden kaydedilen değişiklikleri göstermek için yüklenir.
   
Bu basit örnekte; StreamReader ve StreamWriter sınıflarının kullanılan birçok kullanım çeşidinden sadece birkaçını gösterdik. Bu sınıflar sadece text dosyaları için değil, text dosyası gibi çalışan tüm benzerleri içinde kullanılır. XML, web sayfaları, sınıflar (.cs ya da .vb) ve daha onlarcası bunlara örnektir.
 
 
OkuYaz.aspx
 
<%@ Page Language="C#" %>
   
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
   
<script runat="server">
   
    void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            TextBox1_Load();
        }
    }
   
    void Button1_Click(object sender, EventArgs e)
    {
        System.IO.StreamWriter StreamWriter1 = new System.IO.StreamWriter(Server.MapPath("test.txt"));
        StreamWriter1.WriteLine(TextBox1.Text);
        StreamWriter1.WriteLine("Line1.\r\nLine2.");
        StreamWriter1.Close();
        TextBox2_Load();
    }
   
    void TextBox1_Load()
    {
        if (System.IO.File.Exists(Server.MapPath("test.txt")))
        {
            System.IO.StreamReader StreamReader1 = new System.IO.StreamReader(Server.MapPath("test.txt"));
            TextBox1.Text = StreamReader1.ReadToEnd();
            StreamReader1.Close();
        }
        else
        {
            TextBox1.Text = "Yeni Dosya.";
        }
    }
   
    void TextBox2_Load()
    {
        if (System.IO.File.Exists(Server.MapPath("test.txt")))
        {
            System.IO.StreamReader StreamReader1 = new System.IO.StreamReader(Server.MapPath("test.txt"));
            TextBox2.Text = StreamReader1.ReadToEnd();
            StreamReader1.Close();
        }
    }
</script>
   
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Text Dosyasini Düzenle</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <b><span style="font-family: Verdana">Text Dosyasini Düzenle</span></b><br />
        <asp:TextBox ID="TextBox1" Runat="server" Width="400px" Height="200px" TextMode="MultiLine"></asp:TextBox><br />
        <asp:TextBox ID="TextBox2" Runat="server" Width="400px" Height="198px" TextMode="MultiLine" Enabled="False"></asp:TextBox><br />
        <asp:Button ID="Button1" Runat="server" Width="60px" Height="20px" Text="Kaydet" OnClick="Button1_Click" />
    </div>
    </form>
</body>
</html>

Görüşmek Üzere

Osman KURT

Yazılım Geliştirici ve Grafiker

ASP.Net De File Upload İçin Webconfig Ayarı

Bu yazımda upload veya multiupload işlemleri sırasında sorun yaşamamak için yapmamız gereken ayarlardan bahsedeceğim.Ancak büyük boyutlu dosyalar kullanıldığında eğer ayarları belirtmemişsek hatalarla karşılaşmaktayız. Bu hataları gidermek için projemizin web.config dosyasında aşağıdaki gibi ayarlarmalar yapmalıyız. Bu şekilde dosya upload işlemleri sırasında karşılaşabileceğimiz sıkıntıları engelleyebiliriz.

Web.config dosyamızda aşağıdaki kodları (system.web tagı arasına) ekleyerek değerleri projemize göre ayarlamalıyız.

<httpRuntime
 executionTimeout="200" //sn cinsinden timeout süresi 
 maxRequestLength="20000" // kb cinsinden upload miktarı belirleme
 appRequestQueueLimit="5000"  //aynı anda karşılanacak istek sayısı
 requireRootedSaveAsPath="true"  //dosya yolu belirlemede root'tan başlanır
 shutdownTimeout="90"  //dk cinsinden isteklerin çalışma süresi
 />

Msdn'den bu ayar hakkında ve tüm özellikleri hakkında daha fazla bilgiye buradan ulaşabilirsiniz. Ayrıca bu ayarların Visual Studio 2003, 2005 ve 2010 ile .Net Framework (1.1, 2.0, 3.0, 4.0) sürümleri arasındaki farklarını da görebilirsiniz.

ASP.Net de Mail ile Dosya,Resim Göndermek

Evet arkadaşlar bir çoğumuzun işine lazım olmuştur yada olucaktır. iletişim formlarında yazının yanı sıra herhangi bir dosya göndermeyi yapan bir kod yazıcam size. Eminim ki işinize yarıcaktır. Şimdi iletişim formumuzu oluşturduktan sonra  gönder butonumuzun altına kodlarımızı yazmaya başlayalım.

SmtpClient mailClient = new SmtpClient("mail.sietadi.com", 111); //Bu kısma port nosunu yazın
                NetworkCredential cred = new NetworkCredential("mail adresi", "şifre");
                mailClient.Credentials = cred;

                MailMessage contact = new MailMessage();
                contact.From = new MailAddress(txtmail.Text);
                contact.Subject = "Başlık";
                contact.IsBodyHtml = true;
                contact.Body = "<table><tr><td>Firma Adı :</td><td>" + txtfirmaadi.Text + "</td></tr><tr><td>İlgili Kişi :</td><td>" + txtilgilikisi.Text + "</td></tr><tr><td>Tel No :</td><td>" + txttelno.Text + "</td></tr><tr><td>Fax No :</td><td>" + txtfaks.Text + "</td></tr><tr><td>Adres :</td><td>" + txtadres.Text + "</td></tr></table>";
                if (FileUpload1.HasFile)
                {
                    Attachment a = new Attachment(FileUpload1.FileContent, FileUpload1.FileName);
                    contact.Attachments.Add(a);
                }
                contact.To.Add(gidicem mail adresi);
                mailClient.Send(contact);

contact.body alanını kendinize göre düzenleyin formunuz ne var ne yok bilmediğim için bişey diyemiyorum ben kendime göre yaptım.

Kodlarımız bu kadar arkadaşlar umarım faydalı olur.

Görüşmek Üzere;

Osman KURT

Yazılım Geliştirici ve Grafiker