Pages

Solving "The project file ' ' has been renamed or is no longer in the solution"

We were recently faced with the error message The project file ' ' has been renamed or is no longer in the solution in Visual Studio 2008. The problem is that from this message you have no idea what is actually the matter. We finally figured out that this happens when a Web Project contains references to assemblies or projects it can't find. Here's how you solve this:

    Right click the Web project and select Property Pages.
    A window will open which lists all the references, either to the bin-folder, GAC or other projects in the solution.
    Remove those that show (unavailable) behind it.
    Chances are that now you can't build because the reference is not there. Simply add the reference again and you should be OK

Windows Identy / Windows Principal

identity3 MPj03415220000[1]

User identity is a common means of controlling access to a business application or limiting the options available within that application. The .NET Framework classes under the namespace System.Security.Principal are provided to assist in making such role-based security determinations.

*firstly you must add this dll :
System.Security.Principal;   System.Security.Policy;
then:
The Framework provides a WindowsIdentity class that represents an authenticated Windows user and a WindowsPrincipal class that encapsulates the WindowsIdentity and information about the user's role memberships. These objects representing the current user are accessible in one of two ways: using a static property on the Thread object or a static method on the WindowsIdentity object.
you can see example of windows identity and windows principal ;

namespace Example
{
    class Program
    {
        static void Main(string[] args)
        { 
            WindowsIdentity kimlik = WindowsIdentity.GetCurrent();
            Console.WriteLine(kimlik.Name.ToString());
            Console.WriteLine(kimlik.Token.ToString());
            Console.WriteLine(kimlik.AuthenticationType.ToString());

            if (kimlik.IsAnonymous)
                Console.WriteLine("Genel kullanıcı");
            if (kimlik.IsGuest)
                Console.WriteLine("Misafir kullancı");

            kimlik = WindowsIdentity.GetCurrent();
            WindowsPrincipal kimlik2 = new WindowsPrincipal(kimlik);
            Console.WriteLine(WindowsBuiltInRole.Administrator);
            kimlik2.IsInRole(WindowsBuiltInRole.Administrator);
            Console.ReadLine();

        }
    }
}

you will see like this when you run your code ….image

Make your own Tcp Server/ Client

tcp-ip




    In this tutorial I’m going to show you how to make a tcp server with C#. If you ever work with windows’ sockets , you already know how difficult this can sometimes be. However you can see how it can be easy in .net platform.

* firstly you must add which name space you need for network programming.
using System.Net;
using System.Net.Sockets;
And then you can write this code ;

image  
Now Just start to explain our code.In main function you just define your class instance which name is Initialize and use it’s method which is called StartListen.And in this method we just  called the StartStream method firstly.
At the StartStream method our first work is defining  our variable.After this We must send parameter to TcpListener object what it needs.
*newsock = new TcpListener(IPAddress.Any, Convert.ToInt32(port));    => here we define ip adres and port for listener.
*newsock.Start();   =>
Just started our TcpListener.
*client = newsock.AcceptTcpClient();   =>  this code part is blocking until a client is connected to the  server and accepts a pending connection request.
*ns = client.GetStream();   => set our networkStream to send or receive data. 
* In the StartListen method, you define byte array and use networkstream write method.
byte[] dizi = Encoding.ASCII.GetBytes(LA);  
ns.Write(dizi, 0, dizi.Length);  

Attention ! please dont forget to close your stream after all works are  over.Like these =>   
newsock.Stop();  client.Close(); ns.close();


At client side, you can use this code block for read data from tcpserver. And you can find explanation about every statement why we use it.


byte [] data = new byte[1024];
//this line is about reading data from networkstream
// and just for learning to find how many byte we use in array which name is ‘data’
recv = ns.Read(data, 0, data.Length);
//at here, we convert our data type byte to string  
string ss = Encoding.ASCII.GetString(data, 0, recv);
// after this line you can do what you want …

Get data from xml file

 

images Today I decided to write my article about xml , firstly I want to say somethink about my grammar ,this is my first article that I use english so I m sory if I make mistake. :))

*Why we use xml file ?
*because in the real world, computer systems and databases contain data in incompatible formats.XML data is stored in plain text format. This provides a software- and hardware-independent way of storing data.This makes it much easier to create data that different applications can share.

XmlTextReader xmlDocument = new XmlTextReader("MyXmlFile.xml");

                while (xmlDocument.Read())
                {
                    if (xmlDocument.NodeType == XmlNodeType.Element)
                    {
                        switch (xmlDocument.Name)
                        {
                            case "ip":
                                _IpAdres = Convert.ToString(xmlDocument.ReadString());
                                break;
                        }
                    }
                }
                xmlDocument.Close();

Console.WriteLine(IpAdres );

*XmlTextReader xmlDocument = new XmlTextReader("TcpServer.xml");
At this sentence you just defined your stream for reading  xml and set it’s parameter which is about file path .
*while (xmlDocument.Read())  after defined your stream, you can start reading the first line of your file
*xmlDocument.NodeType == XmlNodeType.Element  At this part of code you just verify your node type for sure it not root node. And then you can use switch  to take your node name  .
* when you found  which name you search you could read that line and convert which type you want  same this =>   _IpAdres = Convert.ToString(xmlDocument.ReadString());

C# ile Tek Kullanımlık Şifre Üretmek

B-3280~1

public string Sifre ()
{
Byte[] bit = new Byte[10];
new Random().NextBytes(bit);

//Console.WriteLine(BitConverter.ToString(bit));
String sifre = Convert.ToBase64String(bit);

return sifre ;

}  

JavaScript kodundan server taraflı fonksiyon çağırmak

sayfanızın .cs tarafında hazırladığınız bir fonksiyonu javascript kodu içinden çağırmak istiyorsanız şu adımları izleyebilirsiniz

//.cs sayfasında

public string Fonksiyonum()

{

//işlemler

return “islemler yapildi”

}

//script tagları arasında

function fonksiyonCagir()

{

var gelen = ‘<% = Fonksiyonum() %>’

window.alert(gelen);

}

Visual C# Kısa yolları

Posterinizi aşağıdaki linkten indirebilirsiniz..

http://www.microsoft.com/downloads/details.aspx?FamilyID=e5f902a8-5bb5-4cc6-907e-472809749973&displaylang=en

sizdemi teknolojiyi seviyorsunuz?

image

Windows 7'nin kesin çıkış tarihi açıklandı

Şirketten yapılan açıklamaya göre yeni işletim sisteminin kullanıcılarıyla buluşacağı tarih 22 Ekim 2009 olarak açıklandı. Mevcut lisanslı Windows kullanıcılarına terfi programı da aynı tarihte sunulacak. Açıklama Taipei'de düzenlenen Computex fuarında Microsoft'un başkan yardmcılarından Steve Guggenheimer tarafından yapıldı. Microsoft'tan daha önce yapılan açıklamalarda "yıl sonuna doğru" ifadesi kullanılıyor, kesin bir tarih verilmiyordu. Halen beta sürümü kullanımda olan Windows 7 ile ilgili kullanıcıların ilk izlenimleri ise genelde olumlu. Microsft'tan yapılan açıklamaya göre Windows 7'nin netbook'lar dahil tüm PC'lerde çalışacağı belirtilmişti.

AJAX Control Toolkit Release Notes - May 2009 Release Version 3.0.30512

New controls

This release includes three important new controls:

    HTMLEditor

    The HTMLEditor control allows you to easily create and edit HTML content. You can edit in design mode, as a rich text editor, or in source view to edit the HTML markup directly.

    ComboBox

    The ComboBox control provides a DropDownList of items, combined with TextBox. Different modes determine the interplay between the text entry and the list of items.

    ColorPicker

    The ColorPicker Control Extender can be attached to any ASP.NET TextBox control. It provides client-side color-picking functionality with UI in a popup control.any thanks to Alexander Turlov for building this.

Linq Ertelenmiş yürütme (differed execution) ve Anında yürütme (immediate Execution )

Linq ifadeleri çalışma anı önemlidir.Linq ifadeleri çağrıldığı anda çalışırlar

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Linq_Ertelenmisveanındayurutme
{
    class Program
    {
        static void Main(string[] args)
        {

             String[] isimler = new string[4] { "İbrahim", "Ali", "Veli", "Mahmutt" };
            int x = 5;
            var sorgu = from  kisi in isimler
                        where kisi.Length==x
                        orderby kisi
                        select kisi.ToUpper();

            x=7;
            foreach (string ad in sorgu)
            {
                Console.WriteLine(ad);

            }
            Console.Read();

        }
    }
}

image
Dikkat edecek olursak sonuçlar 7 harflidir. Çünkü x = 5 ken linq sorgusu çalışmamıştır.
foreach içinde çağrılduğı anda linq sorgusu çalışmıştır. ve bu çağrılmadan hemen önce x=7 olmuştur. Buna ertelenmiş çalıştırma deniyor.Bu yöntemin amacı Linq ifadelerinin bir kere yazılması ve farklı zamanlarda çağrıldığında güncel sonuçları döndürmesidir.

peki ya bu işlemin tersini yapmak istersek. Hemen çalışmasını istersek ne yapmamız gerekir.

Sorgunun o anda çalışması ve sonucun korunması için .net framework bize  ToArray<T>(),
ToDictionary<TSource,TKey>(), ToList<T>()
gibi genişletme yordamları sunmaktadır.
hemen bir örnek ile anında çalıştırmayı görelim

int x = 3;

           //var sorgu = from  kisi in isimler
           //            where kisi.Length==x
           //            orderby kisi
           //            select kisi.ToUpper();

              var  sorgu = (from kisi in isimler
                       where kisi.Length == x
                       orderby kisi
                       select kisi.ToUpper()).ToArray<string>();

           x=7;
           foreach (string ad in sorgu)

şeklinde değiştirelim. Ekranda Ali yazacaktır.Görüldüğü gibi burda işlem hemen yapılmış ve 3 harfli isim yazdırılmış sonra x değişkeninin değeri 7 yapılmıştır.

image

Linq Sorgu Ve Söz Dizimi Kullanılması

 

Önce konsol uygulaması açıyoruz. ve aşağıdaki kodları yazmaya başlıyoruz.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LinqSozDizimi
{
    class Program
    {
        static void Main(string[] args)
        {
            String[] isimler = new string[4] { "İbrahim", "Ali", "Veli", "Mahmutt" };
            var sorgu = from  kisi in isimler
                        where kisi.Length==7
                        orderby kisi
                        select kisi.ToUpper();

            foreach (string ad in sorgu)
            {
                Console.WriteLine(ad);

            }
            Console.Read();
        }
    }
}

yukarıdaki kodumuzda önce dizimizi oluşturduk sonra var sorgu = kodu ile  Anonim bir türde değişkenimizi oluşturduk(anonim tiplerde derleyici çalışma anında içindeki veriye göre değişkenin tipini belirler)

var sorgu = from  kisi in isimler
                        where kisi.Length==7
                        orderby kisi
                        select kisi.ToUpper();

bu kısımda ise verimizi çektik.Bu tarz Anonim tipler kullanılmış  ifadeleri genellikle sorgudaki select operatörünün geri döndüreceği değerler her seferinde değişebiliyor ise kullanılır.(Çünkü ozaman sorgunun döndüreceği sonucu karşılayacak tür bulunmamaktadır.) 
Burada klasik sql sorgularına benzer bir yapı olduğu dikkatinizi çekmiştir.
Eğer sonucun string tipinde döneceğini biliyor isek şu şekilde de yazabilirdik

IEnumerable<string >sorgu = from  kisi in isimler
                        where kisi.Length==7
                        orderby kisi
                        select kisi.ToUpper();

Dikkat: sorgualanacak yapı IEnumerable<T> arabirimini desteklemesi gerekir.
burada eğer linq olmasaydı foreach döngüsü içinde if ile tüm kayıtların kriterimize uyup uymadığına bakacaktık.

imageekran Çıktısı ikisindede bu şekilde olur.

Aşağıdaki gibi bir örneğe bakalım şimdi. Burda 2 öğesi olan isimsiz bir tür döndürüyoruz geriye.

var sorgu = from kisi in isimler
                       where kisi.Length == 7
                       orderby kisi
                       select new { boyut = kisi.Length, deger = kisi };

           foreach (var  ad in sorgu)
           {
               Console.WriteLine(ad);
          }

dikkat etmemiz gereken kısımlar sorgunun anonim tipte olması ve select ifadesinin geriye tipleri farklı 2 değer döndürmesi ve foreach kısmında yine anonim tip oluşturmamızdır.

image
başka bir kullanımını görelim şimdi Meselabir class oluşturup dönen değerlerimizi bu sınıf öğelerine atayalım

public class benimclassim
   {
       public int boyut;
       public string deger;

   }

sınıfımızı oluşturduk şimdi ifademizde şu değişiklikleri yapalım.

var sorgu = from kisi in isimler
                        where kisi.Length == 7
                        orderby kisi
                        select new benimclassim
                        {
                           boyut=kisi.Length,
                           deger= kisi
                        };

Linq Nedir.

Linq “Dil ile bütünleşik sorgulama” anlamına gelmektedir.Linq .net framework 3.5 ile ortaya çıkmıştır.Linq sql benzeri sorgulama yapılmasını sağlar fakat bu sorgulama da tamamen nesnel ifadeler kullanılır. Yani nesneer ile veritabanları arasında köprü görevi üstlenir.Sql kodu yerine programımızda nesneler kullanarak veriye erişimi sağlar.
Linq ya ait sınıf ve arabirimler System.Linq sınıfı altında bulunur.
linq Veritabanları ,Ado.net ,xml belgeleri ve bellekte bulunan veriler için özel sağlayıcılar sunar bize bunlar Linq to Object ,Linq to SQL (DLinq),Linq to Xml(XLinq) ,Linq to Dataset tir.

Linq To object : Bu sağlayıcı koleksiyonları sorgulamaya yarar.Fakat Sadece IEnumeralbel<T> arabirimini destekleyen koleksiyonlar sorgulanır.System.Linq.Enumerable a ait fonksiyonlar kullanılır.
Linq to Xml: Adından anlaşılacağı gibi xml belgelerini sorgulamak için kullanılır. System.Xml.Linq kütüphanesini kullanır.
Linq to SQL(DLinq) : İlişkisel veritabanlarını sorgular.Linq ile veritabanı standart sorgulama dili olan Sql arasından ki iletişim Veritabanı işaretleme dili (Database Markup Language –DBML) sağlar.
Linq To Dataset : Ado.net in Dataset neenelerinin ilişkisel veritabanı gibi sorgulanmasını sağlar.

linq
-Msnd Magazinden alınmış Linq Mimarisi-

LİNQ mimarisi aşağıdaki yazım biçimlerini destekler.

  • Sorgulama Yazım Biçimi
  • Genişletilmiş yordamlar(Extension method ) ve Lambda ifadeleri
  • Enumerable (sayılabilir ) türler
  • Generic delegeler
  • Anonim yordamlar

Lambda ifadeleri ve Extension methods en çokk kullanılanlarıdır.

C de tek while ile sayıyı tersten yazdırma

int b = 0;
int a = 853;
while((a/10)>=1)
{
b= (b*10)+(a%10);
a=a/10;
}

nedirtv?com - Mayıs Ayı Webinerleri

Konu: SQL Server Integration Services(SSIS)
Konuşmacı: Burak BATUR
Zaman: 12 Mayıs 2009 Salı 21:00-22:00
Adres: https://www.livemeeting.com/cc/mvp/join?id=G7WZ27&role=attend
Konu: ASP.NET MVC - URL Routing
Konuşmacı: Uğur UMUTLUOĞLU
Zaman: 18 Mayıs 2009 Pazartesi 21:00-22:00
Adres: https://www.livemeeting.com/cc/mvp/join?id=NSWTM3&role=attend
Konu: WCF 4.0 ve WF 4.0WCF 4.0 ve WF 4.0
Konuşmacı: Burak Selim ŞENYURT
Zaman: 19 Mayıs 2009 Salı 21:00-22:00
Adres: https://www.livemeeting.com/cc/mvp/join?id=N5PFDH&role=attend
Konu: WCF ve TCP Hosting
Konuşmacı: Onur ŞİMŞEK
Zaman: 20 Mayıs 2009 Çarşamba 21:00-22:00
Adres: https://www.livemeeting.com/cc/mvp/join?id=WG72QF&role=attend
Konu: REST Bazlı WCF Servisleri ve WCF Rest Starter Kit
Konuşmacı: Burak Selim ŞENYURT
Zaman: 26 Mayıs 2009 Salı 21:00-22:00
Adres: https://www.livemeeting.com/cc/mvp/join?id=T9FM2B&role=attend
Konu: XNA Game Studio ile 3D Oyun Geliştirme-1
Konuşmacı: Cemil UZUN
Zaman: 27 Mayıs 2009 Çarşamba 21:00-22:00
Adres: https://www.livemeeting.com/cc/mvp/join?id=9QPZ6Q&role=attend

SharePoint Designer 2007 Ücretsiz

Office SharePoint Designer 2007 artık ücretsiz,  ilgi çeken SharePoint siteleri yaratabilmek ve SharePoint platformunda iş akışı odaklı uygulamalar ve raporlama araçlarını kısa sürede oluşturabilmek için ihtiyaç duyduğunuz tüm araçları kullanımınıza sunuyor.
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=baa3ad86-bfc1-4bd4-9812-d9e710d44f42 
bu linkden indirebilirsiniz.

Google işe 200 keçi aldı.

Google işe 200 keçi aldı

Bilişim devi Google, tam 200 tane keçi kiraladı. Keçiler Google'da ne iş yapacaklar?

Keçiler Google'da ne iş yapacaklar? Bu günlerde silikon vadisinde bırakın iş bulmayı, işinizi korumak bile kolay değil. Ama bu kriz döneminde Google kadrosuna tam 200 yeni eleman kattı.

Fakat bu elemanların uzmanlığı bilişim değil. Onların uzmanlığı ot yemek...

Google'ın resmi blog'unda duyurduğu bu ilginç olayın başrolünde tam 200 adet keçi bulunuyor. Google'ın keçilerden tek istediği ise ot yemeleri. Google'ın ofislerinden birinin bulunduğu bölgede yetişen yaban otlarından kurtulmak için firma bu ilginç yönteme başvurdu. Blog'daki açıklamada "Aynı işlemi çim biçme makinesi ile de yapabilirdik ama keçilerin bize maliyeti hemen hemen aynı üstelik çok daha sevimliler" sözleri yer aldı.

Fakat ne yazık ki keçiler geçici görevle Google'da bulunuyorlar. Otlar bitince onlar da sahiplerine geri dönecekler.

fft17_mf235573

Tübitak- Sayıların Okunuşu - Merak ettiğiniz tüm sayıları girerek okunuşunu görebilirsiniz.

 

Tübitak ın bu uygulamasıyla aklınıza gelen tüm rakamların okunuşlarını ögrenebilirsiniz .Örnek12345678998745632145858754554587554815 Okunuşu On iki undesilyon üç yüz kırk beş desilyon altı yüz yetmiş sekiz nonilyon dokuz yüz doksan sekiz oktilyon yedi yüz kırk beş septilyon altı yüz otuz iki seksilyon yüz kırk beş kentilyon sekiz yüz elli sekiz katrilyon yedi yüz elli dört trilyon beş yüz elli dört milyar beş yüz seksen yedi milyon beş yüz elli dört bin sekiz yüz on beş http://www.biltek.tubitak.gov.tr/sandik/sayicevir/index.php bu linkten istediginiz sayıyı yazıya çevirebilirsiniz

Hacker Olimpiyatları

Önümüzdeki ay Vancouver'da düzenlenecek "Hacker Olimpiyatları"nda cep telefonu ve internet tarayıcısı kırma dallarında müsabakalar mevcut.

Digital Vaccine Labs'ın sponsorluğunda düzenlenen Pwn2Own "Hacker Olimpiyatları", bu sene Vancouver CanSecWest güvenlik konferansı dahilinde katılımcı bekliyor. Amaç, belirlenen cep telefonu işletim sistemleri ve internet tarayıcılarının zayıf noktalarını bulmak. Şartlar ise bulunan açıkların üreticilerle paylaşılması ve bu açıklar giderilene kadar sır olarak kalmalarından ibaret.

Cep telefonu dalında Android, Symbian ve Windows Mobile işletim sistemiyle çalışan ve aralarında iPhone ve BlackBerry'nin bulunduğu cihazlar kırılmaya çalışılacak. Sistemde açık bulan katılımcılar 10 bin dolarla ödüllendirilecek ve kırdıkları telefon da yanlarına kalıcak.

İnternet tarayıcısı dalında ise yarış Windows 7 yüklü Sony Vaio üzerinde çalışan Internet Explorer 8, Firefox ve Google Chrome ile OS X yüklü MacBook üzerinde çalışan Safari ve yine Firefox arasında geçecek. Bu dalın ödülü 5 bin dolar.

Geçen yıl aynı yarışmayı OS X yüklü MacBook'u kıran Charlie Miller kazanmıştı. İkinciliği ise Windows Vista'yı kıran yarışmacı alırken, severek kullandığımız Linux dağıtımı Ubuntu kırılamamıştı.

software_development

iPucu! Linkler arası farklar.

standart Link : Eğer sunucu tarafında hiç bir kod çalıştırlmayacaksa bu kontrol tercih edilmelidir. Sunucu kaynaklarını daha az kullanır.
<a href="Default2.aspx">Default2</a>
HyperLink: Eğer sunucu tarafında bazı kodlar çalıştırılacaksa bu kontrol tercih edilmelidir. Sayfanın içeriği sunucuya gönderilmez.
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/Default2.aspx"> Default2 </asp:HyperLink>
LinkButton: Eğer sunucu tarafına sayfanın içeriği de gönderilecekse bu kontrol tercih edilmelidir. Sunucuyu en çok meşgul eden kontroldür.
<asp:LinkButton ID="LinkButton1" runat="server" PostBackUrl="~/Default2.aspx">Default2 </asp:LinkButton>

İpucu!Server.Transfer/execute

Server.Transfer metodu yüksek performans gerektiği anlarda, sunucuya herhangi bir postback olması durumunda ve hata sayfaları gibi yerimlerine kaydedilmeyecek sayfalarda kullanılmalıdır. Ayrıca bu metotta hata yönetimi Redirect metoduna göre daha kolaydır.
Server.Execute metodu ise bir önceki sayfanın kontrollerinin yeni sayfa da görülmesi gerektiği anlarda kullanılmalıdır.

İpucu! DataList’e ArrayList bağlamak.

Bir DataList’e, sadece DataTable ile veri bağlamak zorunda değiliz. ICollection arayüzünü uygulayan herhangi bir nesneyi de DataList’e veri kaynağı olarak bağlayabiliriz.

namespace DataListControl
{
public class Dokuman (string Adi, string Icerik, string Kategorisi)
{string Adi;string Yazari;  string Bolumu; 
Adi = Adi;
icerik= Icerik;
Bolumu= Kategorisi;
}
}############### arraylist oluşturup data liste eklediğimiz satırlar aşağıda######

ArrayList aListKitaplar = new ArrayList();

aListKitaplar.Add( new Kitap(" İbo ", "Asp.net ", "Dandun  " ) );
aListKitaplar.Add( new Kitap( " Gereksiz", "Gerekli  ", "Dandun ") );
DataList1.DataSource = aListKitaplar;

iPucu! ViewState nedir?

View State, bir ASP.NET sayfası içerisinde bulunan kontrollerin özelliklerinin ve programcının istediği verilerin saklanmasını sağlayan yapıdır.. Varsayılan olarak biz belirtmesek bile, sayfada Postback işlemi gerçekleştiğinde kontrollere ait bilgiler sunucu tarafında HTML kodları üretilirken şifrelenmiş bir şekilde View State içerisine yazılır. Sayfa tekrar yüklendiğinde ise kontrollerin özellikleri bu nesneden okunur. Böylece Postback işlemi sonucunda kontroller üzerinde yapılan değişiklikler sayfa tekrar yüklendiğinde kaybedilmeden elde edilebilir.

Asp.net Cache işlemleri( Output Caching)

Web uygulamalarında performans önemlidir. Performansı artırmanın yollarından biride caching dir.Caching yani sayfayı önbellekte tutma işi belirli süre içinde kullanıcı sayfayı tekrar çağırmışsa html’in önbellekten yüklenmesidir.

<%@OutputCache Duration="300" Location="Any" VaryByParam="none" %>
burda Duration çnbellekte saklama süresini location ise sayfanın  nerede önbellekleneceğini verir.

Location nesnesinin alabileceği değerler şunlardır
Any :Önbellekleme, isteği yapan Client, Proxy Server yada isteğin yapıldığı server üzerinde olur.
Client:Önbellekleme, isteği yapan Client’ de olur.
DownStream:Önbellekleme, isteği yapan Client’de ve Proxy Server üzerinde olur.
None:Önbellekleme yapılmaz.
Server:Önbellekleme, isteğin yapıldığı Server üzerinde olur.
ServerAndClient:Önbellekleme, isteği yapan Client’de ya da isteğin yapıldığı Server üzerinde olur.

şimdi kodumuzu yazalım ve görelim 20 sn içinde gelen verilerin cache den olduğunu.

protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(DateTime.Now.ToString());
        }

Şimdi VarybayParam özelliği ise QueryString’den gelen değerlere göre önbellekleme işlemi yapar.Aşağıdaki kodumuza bakalım.

default.aspx e bu kodu

Response.Redirect("Default2.aspx?ad="+TextBox1.Text+"&soyad="+TextBox2.Text);

bu kodları default2.aspx dosyasına yazarsak göreceğiz ki

protected void Page_Load(object sender, EventArgs e)
        {
            string ad = Request.QueryString["ad"].ToString();
            string soyad = Request.QueryString["soyad"].ToString();

            Response.Write(ad+""+soyad);
        }

<%@ OutputCache Duration="40" Location="Any" VaryByParam="ad" %>

ad alanı değiştirsekte soyad alanına yazacağımız yazılar 40 saniye boyunca değişmeyecek.

Şimdi Fragment Caching yani sayfanın belli bir ksımının ön belleklenmesine bakalım.

hemen Ascx uzantılı yeni sayfamızı oluşturalım.(user control) ve şu kodu yazalım

<%@ OutputCache Duration="10" VaryByParam="none" %>


protected void Page_Load(object sender, EventArgs e)
        {
            Label1.Text = DateTime.Now.ToString();
        }

göreceğiz ki sayfada diğer kontroller refresh ile değişirken bu label in text i sadece 10 saniyede bir değişecek.

Dikkat :UserControl nerelerde kullanılmışsa kullanıldığı her yer için ayrı ayrı çıktısı bellekte saklanır. Shared özelliğini True yaparak, tüm sayfalar için tek bir çıktı bellekte saklanır.

<%@ OutputCache Duration="10"Location="Any" VaryByParam="none"Shared="true”%>

şimdi sayfamızda herhangi bir kotrolün değişimine göre cachleme yapalım. Örneğin dropdownlist ekleyelim ve bunun seçili olan index ine göre önbellekleme yapalım.Önce bu kodu sayfamıza ekleyelim.

<%@ OutputCache Duration="40" Location="Any" VaryByControl="DropDownList1"  Shared="true"%>

Dikkat: Burda DropdownList i mizde AutoPostBack özelliği true yapılmalı ki sayfa yenilendiğinde default öğe seçili olarak gelmesin.

Hemen arkasından sayfayı çalıştırdığımızda ve dropdownlistte bir şeyi seçince sayfanın yeniden cache len diğini görüyoruz. eğer seçili öğeyi değiştirmeden refresh yaparsak 40 sn boyunca aynı veri sayfada görüntülenir. fakat değiştirdiğimiz anda o anki veri görüntülenir ve cache o alınır.

Substitution Caching:
Şimdi Cachleme olayını yaparken tam ters işlemleri yapalım. Mesela sayfa tümüyle cachelenirken sadece bşr bölümü sürekli yenilensin. işte bu işleme Substitution Caching denir.

önce bu kodları oluşturalım. sonra çalıştırdığımızda sayfa refresh edilince sadece tarih alanlarının birini her refreshte değiştiğini görelim diğeri ise sayfanın cache de kalma süresi bittiğinde değişir.
<%@ OutputCache Duration="10" Location="Any" VaryByParam="none" %>

protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(DateTime.Now.ToString());
        }
        public static string DanDun(HttpContext daaan)
        { 
          return DateTime.Now.ToString();
        }

burda dikkat etmemiz gereken kısım: HttpContext sınıfı türünde veri alan ve geriye string döndüren fonksiyon olmalıdır.Çünkü Önbellekleme yapılmış bir sayfa içinde dinamik alan oluşturabilmek için HTML içinde Substitution kontrolünü yada HttpResponse sınıfının WriteSubSubstitution metodunu kullkullanıcaz.

<asp:Substitution ID="Substitution1" runat="server" MethodName="DanDun"/>
yada
<%Response.WriteSubstitution(new HttpResponseSubstitutionCallback(DanDun)); %>

İpucu!<HealthMonitorying >

<healthMonitoring Enabled=”True ”> web.config de bu ayarı yaparak tüm unhandled exception lar için eventlog ayarlarını yapmış olursunuz.EventMapping,Providers ve rules tanımlamanız gerekiyor. Aşağıda iki örneği var bu ayarların.

image 

Bazı durumlarda bu ayarlara <BufferModes> ve <profiles> tagları da eklenebilir.

Not:System.Web.Management.BufferedWebEventProvider satırını unutmayın.

C# ile ekran görüntüsü alma

Merhabalar Şimdi C# ile ekran görüntüsü almak için neler gerekli aşağıda onu inceleyelim.


//Graphichs nesnesi oluştur.
Graphics Grf;
//bitmap tipinde bir nesne oluştur. ve özelliklerini ayarla(boyutları ve formatı)
Bitmap Ekran = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppPArgb);
//Grafik nesnemize bitmwp tipininde olacağını söylüyoruz.
Grf = Graphics.FromImage(Ekran);
//Ekran görüntüsünün kpyasını alıyoruz.
Grf.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
//Görüntüyü istediğimiz bir yere kaydediyoruz.
Ekran.Save("C:\\İbrahim.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);

C# Excel Grafik işlemleri ve Formüller

Bir önceki makalede C# ile excel e yazmak tan bahsetmiştik.Muhtemelen sadece yazmak yetmeyecek, yazdığımız metni biçimlendirmek isteyeceğiz. Excel’de renk atamak için System.Drawing.Color kullanılmaz bunun yerine renk önce tam sayıya dönüştürülmelidir. Bunun için rengi kırmızı tonu 65536, yeşil tonu 256 ile çarpılır ve mavi tonu ile toplanır. Bunun için basit bir fonksiyon kullanabiliriz

Color color;
color.B*256*256 + color.G*256 + color.R;

temel Font özlekkiklerini değiştirmek istiyorsak;
Range Bolge;
Bolge.Font.Name = "Courier New";
Bolge.Font.Italic = 1;
Bolge.Font.Size = 22f;
Bolge.Font.Bold = 1;

Metni hizalamak için;

Bolge.VerticalAlignment = XlVAlign.xlVAlignCenter;
Bolge.HorizontalAlignment = XlHAlign.xlHAlignCenter;

 

image

sayfada Grafik oluşturmak istersek.
aşağıdaki kodları yazmız gerekiyor.
ApplicationClass ve Workbook nesnelerimizi oluşturduktan sonraAşağıdaki kodu yazıyoruz.(ApplicationClass ve Workbook nesne örnekleri önceki makalemde var )


Worksheet Sayfa=(Worksheet)Calisma.Worksheets[1];Chart grafik1 = (Chart)ExcelVeri.Charts.Add(Missing, Missing, Missing, Missing);
            object Hucre_1 = Sayfa.Cells[1, 1];
            object Hucre_2 = Sayfa.Cells[1, 7];
            Range Alan = Sayfa.get_Range(Hucre_1, Hucre_2);
            grafik1.SetSourceData(Alan, XlRowCol.xlRows);
            grafik1.ChartType = XlChartType.xlPie;
            grafik1.Location(XlChartLocation.xlLocationAsObject, Sayfa.Name);

image excel sayfamıza eklediğimiz grafik.

C# Excel Veri yazma

C# ile excel programına erişirken Microsoft.Office.Interop.Excel; clasından faydalanıcaz.
şimdi bu sınıfın sağladığı bir kaç nesneden faydalanıyoruz.

  • Workbook: Microsoft Excel çalışma kitabını temsil eder.
  • Worksheet: Çalışma kitabı içindeki çalışma sayfalarını temsil eder
  • Range: Bir çalışma sayfasında bir veya daha fazla hücrenin oluşturduğu alanı temsil eder.

Şimdi gelelim excele veri yazma olayına ;Gerekli açıklamalar kod içinde yazmaktadır.

Not: Aşağıdaki kodda dikkat etmemiz gereken bir özellik var worksheet[1] diyerek ilk sayfayı aldık. Worksheet[0] demiyoruz. burda indexler 1 den başlar . o yazarsak program hata verecektir.

Not2: object Hücre1 = Sayfa.Cells[i, j]; burada Cells içinde i ve j de 1 den başlar 0 dan değil.

image

image İşte Excel dosyamız açılıyor ve içine yazılanlar.

Aşağıda ise Excel Dosyamızı kaydetmek için yazılmış kod parçası yine gerekli açıklmalar üstünde yazılmıştır.

image

 

 

.

SqlBulkCopy ile veri taşıma(Excel to SqlServer )

Merhaba arkadaşalar.Excel de bulunan verileri sqlservere taşıma ihtiyacı duyabiliriz bazı projelerde.Bu iş için SqlBulkCopy sınıfını kullanacağız ve verileri aktaracağız.SqlBulkCopy sınıfı, bir veri kaynağından SQL Server veritabanına veri transfer etmek istediğimizde; işimizi oldukça kolaylaştırır

 image image Şimdi Öncelikle verileri alacağımız excel dosyasını oluşturalım.ID,Kadi,Sifre Alanları nı oluşturalım ve birkaç veri girelim.
NOT: burda üç Stunu Seçip Sol üstte ki alana ExcelVeri yazarak tablo adımızı belirlemiş oluyoruz.

Hemen Arkasından Sqlserver de tablomuzu oluşturalım ve Tablomuzu da buradaki gibi yapılandıralım. 

Hemen Arkasından kodumuzu yazmadan önce
using System.Data.OleDb;
using System.Data.SqlClient;
Satırlarını ekleyelim kodumuza.

Şimdi Programımız çalıştıralım ve

image

SqlServerdimize  Exceldeki  verilerini yerleştirmiş olduk.
Şimdi Kodumuzu Görelim.Gerekli tüm açıklamalar kodumuzun üstünde yazılı.

image

Asp.NET Cookies(Çerez) Okuma yazma işlemi

Merhabalar, Cookilerin başlıca kullanım amacı clientta veri tutmaktır.Peki neden client ta veri tutalım yada nerelerde cookie kullanırız?
Sitemize kullanıcı bağlandığında kullanıcı hakkında almak istediğimiz bazı verileri herseferinde kullanıcıya sormamamak için.Örneğin: sitelerin login sayfalarında beni hatırla kısmı vardır. İşte burda bizim o kullanıcıyı hatırlamamız cookilerin yardımı ile olur.client da kullanıcı adı şifre vb.. bilgileri depolar, kullanıcı tekrar bağlandığında bu cookie leri okururz. bu sayede kullanıcıya tekrar adını ve şifresini sormaya gerek duymayız.

NOT:ASP.NET içerisinde cookie'lerle işlem yapabilmek için "System.Web" kütüphanesinin eklenmiş olması gerekir

Şimdi Önce cookie mizi oluşturalım.

// Cookie oluştur.
HttpCookie BizimCookie= new HttpCookie("ibrahim");   
// Formdan Gelen Bilgileri Anahtarlara Yaz.
BizimCookie["kullanici_adi"] = TextBox1.Text;    
// Cookienin Bitiş Süresi.
BizimCookie.Expires = DateTime.Now.AddDays(15);   
// Cookieyi Kaydet
Response.Cookies.Add(BizimCookie); 

Not:Cookileri web browserimizin cache ine atar.
Şimdi Daha önceden oluşturduğumuz cookie yi okuyalım

// Cookieyi Al.
HttpCookie CookieOku = Request.Cookies["ibrahim"];   
// Cookiedeki Değerlerle Formu Doldur.   
Label1.Text = CookieOku["kullanici_adi"];  
 

İpucu! Ajax Triggers kullanımı.

Bazen updatepanel içindeki objeleri dışarıdan tetiklemek isteriz.Aşağıdaki kod ile update panel içine yerleştirilen bir objenin updatepanel dışından tetiklenmesini sağlar.Bunun için Trigerr kullanılır.

<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button1" />
</Triggers>

Burak Selim Şenyurt Almanac 2008

Merhaba Arkadaşlar Burak Hocamdan;

Almanac 2008 ile Burak Selim Şenyurt(MVP) tarafından yayımlanmış makalelerin tamamına, PDF formatında ulaşabilmeniz mümkündür.

http://www.bsenyurt.com/makale/almanac2008.rar

AJAX Extension kurulu olmayan sunucuda ASP.NET AJAX projesi çalıştırmak

 

Son zamanlarda gerek mail yoluyla, gerek yakın çevremden en fazla aldığım sorulardan ve sorunlardan biri de, yapılan bir ASP.NET AJAX projesinin bir sunucuya atıldığında çalışmamasıydı. Bildiğiniz gibi ASP.NET AJAX tam sürümü ile birlikte artık Global Assembly Cache'e atılan dll kütüphaneleri üzerinde çalışmaya başladı.(Yani artık Bin dizini içerisine referans olarak dll dosyaları eklenmiyor) Sorunu çözebilmek için bloglardan ve forumlardan biraz araştırma yaptım ama ilgili bir konu bulamadım. Birkaç denemeden sonra (sanırım) sorunu çözdüm. Yapılması gereken işlemler şunlar:
1- Öncelikli olarak ASP.NET AJAX projenize Bin dizini açın ve buraya referans olarak System.Web.Extensions.dll ve System.Web.Extensions.Design.dll dosyalarını ekleyin. Bu dll kütüphanelerini C:\Program Files\Microsoft ASP.NET\ASP.NET 2.0 AJAX Extensions\v1.0.61025 dizininden elde edebilirsiniz.
2- Uygulamanızın web.config dosyasında bazı değişiklikler yapmanız gerekecek. Buradaki bazı tanımlamalardaki type ifadeleri içerisinde yer alan System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 kısımlarındaki Version=1.0.61025.0, Culture=neutral, PublicKeyToken= 31bf3856ad364e35 ifadelerini kaldırmanız gerekecektir. Bu kısımlar, zaten dll dosyalarının Global Assembly Cache'den okunmasını sağlayan açıklamalardır. Bu şekilde artık uygulama GAC'daki dll dosyalarını değil, Bin dizinindeki dll dosyalarını kullanacaktır. (Bu işlemi Find-Replace ile kolayca yapabilirsiniz.)

3- Son olarak uygulamanın bulunduğu dizini virtual directory (sanal dizin) olarak tanımlamak gerekecek.

Not:Uğur UMUTLUOĞLU’nun bloğundan alıntıdır.

.Net Debug – Trace Kullanımı

Nedir Bu Debug ve trace?
Debug ve trace sınıfları uygulamamızı geliştiriken veya çalışma aşamasında bilgi mesajları vermemizi sağlar.System.Diagnostics ad alanında bulunurlar. Visual Studio nun output bölümünde çıktıları görüntülenir. Ayrıca çıktılar listener e gönderilir.Debug ve Trace in listeneri aynıdır.
Debug Sınıfı uygulamaları debug modda derlenirken ,trace sınıfı ise hem debug hem  release modda derlenen uygulamalarda kullanılır.

image

Debug ve trace sınıfının metodları:
Write : Verilen metni Listeners koleksiyonuna yazar.
WriteLine : Verilen metni Listeners koleksiyonuna yazar. Ve bir alt satıra geçer.
WriteIf: Eğer verilen Boolean koşulu True değerini taşıyor ise metni Listeners koleksiyonuna yazar.
WriteLineIf: Eğer verilen Boolean koşulu True değerini taşıyor ise metni Listeners koleksiyonuna yazar. Ve bir alt satıra geçer.
Assert : Boolean türündeki şart karşılanmadığı zaman bir mesaj kutusu ile kullanıcıya bilgi verir. Gelen mesaj kutusundaki seçenekler ile program sonlandırılabilir. Ayrıca Listeners koleksiyonunada ilgili mesajı yazar.
Fail: Assert metod ile aynı işlemi yapar. Tek farkı herhangi bir koşula bakmaz, kodun yazıldığı satıra gelindiğinde Assert metodundaki gibi uyarı mesajı görüntülenir.

Şimdi bir örnek yapalım. Aşağıda output da hem debug hem de trace sınıflarımızın çıktılarını görüyoruz.Çünkü dikkat edin uygulamamızı debug modda derledik.
Dikkat: System.Diagnostics isim alanını eklemyi unutmayın.

image

image  Release modda çalıştırınca debug çıktılarını göremeyiz.

image int bomba=3;
Trace.Fail( "İbrahim Özbey ");


Mesela uygulama bu satıra gelince soldaki çıktıyı verir.

Listener
Debug veya Trace sınıfları kendilerine gelen verileri biriktirerek bir yada daha fazla kaynağa gönderebilirler.Bunuda TraceListener sınıfı tarafından yaparlar.


Dikkat : Listeners koleksiyonu her zaman bir öğeye sahiptir. Bu öğe DefaultTraceListener sınıfından türetilmiş olan bir nesnedir.output ekranına veri iletiminde kullanılır bu listener.

.NET Framework temel sınıf kütüphanesi Trace ve Debug sınfılarının kaydedilmesi için iki adet sınıf barındırmaktadır.Bunlar EventLogTraceListener ve TextWriterTraceListener sınıflarıdır.

TextWriterTraceListener :
Bu sınıf debug ve trace den gelen bilgileri herhangi bir stream üzerinden göndermemize yarar.
image

image 

Yukarı daki örnek te önce Filestream nesnemizi oluşturuyoruz.Sonra TextWriterTraceListener nesnemizi oluşturuyoruz ve kulanacağı stream i belirtiyoruz. Sonra Lstenerimizi ekliyoruz.
sonra debug ve trace bilgilerimizi yazıyoruz.Bu satırlar output ekranına yazılıyor ayrıca listener sayesinde mylog.txt Dosyamıza yazdırılıyor.

EventLogTraceListener:
trace ve debug dan aldığı bilgiyi Windows un eventlog una yönlendir.

image

burada ise Önce Eventlog da mylog adlı bölüm yoksa create ediyoruz.Sonra Eventlog nesnesi oluşturuyoruz. EventLogTraceListener sınıfına Eventlog dan oluşturduğumuz nesneyi ekliyoruz ve Oluşturduğumuz EventLogTraceListener ı listener koleksiyonuna ekliyoruz.Yine Trace ve Debug bilgilerimizi yazıyoruz. bunlar yine output ekranında görünecekler fakat bu kez ayrıca Windows un olay görüntüleyicisinde de görünecekler.
image

TraceListener sınıflarını config dosyasından yönetmek:
Aşağıda remove tagı Default olarak gelen DefaultTraceListener i kaldırır ve add tagları ile bizim kullanacağımız listener çeşitlerini ekleriz.Name ile nesne ismimizi type ile tipini ve initializedata ile başlangıç kaynağımızı gösteririz.
kullanımı ise Direk Kodumuza
Trace.WriteLine(“Appconfig dosyasındaki ayarlarımızı kullandık :D”); satırı yazdık ve App.Config deki ayarladığımız özellikleri kullandık.

image

TraceSwitch:

buraya kadar debug trace sınıflarının çıktılarını aldık ama sınıflandırmadık bu sınıflandırmayı ise traceswitch ile yapacağız.

  • Error: Sadece hata mesajlarını listenere gönderir. tam sayı karşılığı 1 dir
  • off: Hiç mesaj göndermez. tam sayı karşılığı 0 dır.
  • warning : Hata mesajları ve uyarıları gönderir. tamsayı karşılığı 2 dir.
  • info : Hata mesajları,uyarılar,kısa açıklayıcı bilgiler gönderir . tam sayı karşılığı 3 dür.
  • verbose: Hata mesajı ve uyarıları , sistemin ayrıntılı çalışma biçimini gönderir. karşılığı 4 dür.

iki türlü kullanımı vardır ya App.config de yar yaparız yada kodumuzun içinde.
Aşağıdaki öernekte önce traceswitch oluşturuyor. Sonrada Level ini ayrlıyoruz.Sonrada şart sağlıyorsa yazıyoruz.

private void button6_Click(object sender, EventArgs e)
        {
            TraceSwitch ts = new TraceSwitch("ibrahim "," açıklama");
            ts.Level = TraceLevel.Verbose;
            Trace.WriteLineIf(ts.TraceInfo==;False,"Listenere göndereceğimiz trace in level ini verbose olarak ayarladık");
        }

yada web.config de ufak bir ayar yaparak bu işi yine yapabiliriz. Aşağıda ki kodda value değeri yukarıda verdiğimiz trace özelliklerinin tam sayı değeridir. hangisini kullanmak istiyorsak onun değerini yazmalıyız.bu kodu web config dosyasına

<system.diagnostics>
  <switches>
    <add name="BenimSwith" value="1"/>
  </switches>


bu kodu da cs dosyamıza yazarsak. web.config kullanrak yapmış oluruz trace imizin level ayarını.

TraceSwitch ibo = new TraceSwitch("BenimSwith", "Açıklama");             Trace.WriteLineIf(ibo.TraceError == true, "Hata Mesajı");
Trace.WriteLineIf(ibo.TraceWarning == true, "Uyarı Mesajı");
Trace.WriteLineIf(ibo.TraceInfo == true, "Bilgi Mesajı");
Trace.WriteLineIf(ibo.TraceVerbose == true, "Tüm Mesajlar");

Kendi traceListenerimizi oluşturmak istersek :
Oluşturacağımız class TraceListener den inherit almalı ve Write WriteLine metodlarını override etmeliyiz.
hemen bir örnek verelim.Kendi listener classımızı oluşturalım ve sonra web.config de şu ayarları yapalım.

image image
yine bu kodu kullanarak Listenere giden bilgileri sqlServer da kaydedebiliriz.


TraceSwitch ibo = new TraceSwitch("BenimSwith", "Açıklama");             Trace.WriteLineIf(ibo.TraceError == true, "Hata Mesajı");
Trace.WriteLineIf(ibo.TraceWarning == true, "Uyarı Mesajı");
Trace.WriteLineIf(ibo.TraceInfo == true, "Bilgi Mesajı");
Trace.WriteLineIf(ibo.TraceVerbose == true, "Tüm Mesajlar");

.Net Akımlar (streams)

.Net platformunda I/O işlemleri akımlar üzerine kurulmuştur.
Akım: byte düzeyinde bir girdi veya çıktı bilgisi oluşturulmasıdır.Farklı işlemler için farklı akımlar mevcuttur. Örneğin: network gibi aygıtlardan bilgi okuma, ekrana yazma,fiziksel diske yazma.
.NET Framework da 3 standart akım bulunur.

  • Console.Out : standart çıkış akımı
  • Console.In   :Standart giriş akımı
  • Console.Error : Standart Hata akımı

Dikkat:  Konsol uygulamalarında kullandığımız WriteLine(),ReadLine() gibi metodlar Consele.Out,In metodlarına aracılık ederler.

.NET Framework’te hem byte hem de karakter akımı sınıflar mevcuttur.Karakter akımı sınıfları temelde byte akımı sınıfları kullanır. Akım sınıflarının temelini soyut bir sınıf olan System.IO.Stream sınıfı oluşturur.Sınıfın temel metodları :
  image

Şimdi stream sınıfından türemiş akım sınıflarına bakalım. Akımlar program yazarken çok kullanacağımız sınıflardandır.

  • BufferedStream : Tampon Bölgeden okuma yazma işlemi yapan Akım sınıfıdır.Performansı yüksek sınıflardandır. Veriler Byte olarak okunur veya yazılır.
  • FileStream : Dosya ya yazma okuma işlemlerinde kullanılır.
    veriler byte olarak okunur yazılır.
  • MemoryStream : Direk belleği veri depolamak için kullanan akım.Byte veri okur yazar.
  • NetworkStream :  Bir soket üzerinden veri alış verişinde bulunurken kullanacağımız akımdır.

Yukarıdaki sınıflar byte akımı için kullanılan sınıflardır. Peki .net frameworkde karakter akımı için streamler varmıdır?
Karakter akmı için aşağıdaki streamler kullanılır:

  • StreamReader : Byte türündeki akımdan karakterleri okur.
  • StreamWriter : Byte türündeki akıma karakteri yazar.
  • StringReader : String türündeki bir nesneden karakterleri okur.
  • StringWriter : String türündeki bir nesneye karakteri yazar.

Bu sınıfların Temelini iseTextWriter, TextReader oluşturur.
.Net Framework un diğer akım sınıfları ise ;

  • BinaryReader,BinaryWriter : İkili(binary ) tipte verilerin okunup yazılmasını sağlayan streamlerdir.


Şimdi bir kaç örnek yapalım.

TextWriter dosya = new StreamWriter(@"C:\ibrahim.txt");//stream oluşturuyoruz.
dosya.WriteLine(DateTime.Now.ToString());// şuanki tarihi ibrahim.txt ye yazıyoruz
dosya.Close(); // stream i kapatıyoruz.
//Stream oluşturuyoruz okumak için.
TextReader dosya1 = new StreamReader(@"C:\ibrahim.txt");
  MessageBox.Show(dosya1.ReadLine());

// dosya1.ReadToEnd() metodu ile dosyayı sonuna kadar okuyabilirdik.


FileStream Dosya = new FileStream(@"C:\ibrahim.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read);// doyamzı açmak yada yaratmak için hazırlıyoruz.
//Erişim izni olarak okuma ve yazma veriyoruz.
//Doyamızı okuma modunda paylaştırıyoruz. aynı anda başka streamde aokuyabilir.
           byte [] dizi = Encoding.ASCII.GetBytes("İbrahim");
           Dosya.Write(dizi,0,dizi.Length);
           Dosya.Close();

//ibrahim yazızını byta çeviriyoruz. Ve dosyaya yazıyoruz.Stream i kapatıyoruz.


FileStream i bu şekilde de kullanabiliriz

FileStream fs = new FileStream(@"c:\ibrahim.txt", FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter m_streamWriter = new StreamWriter(fs);


//yazmak için.
m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
m_streamWriter.Write(" İbrahim Özbey: ");
m_streamWriter.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(), DateTime.Now.ToLongDateString());
m_streamWriter.WriteLine(" İlk Satır\n");
m_streamWriter.WriteLine(" Sıradaki satır. \n ");
m_streamWriter.Flush();

//okumak için
StreamReader m_streamReader = new StreamReader(fs); 
string str = m_streamReader.ReadLine();

Şimdi birde Memorystream Kullanımına bakalım.

MemoryStream memYaz = new MemoryStream();//stream tanımlıyoruz
          byte[] dizi = new byte[10];
          byte[] oku = new byte[dizi.Length];//byte dizilerimiz okumak ve yazmak için
          try
          {
              memYaz.Write(dizi, 0, dizi.Length);//memorystream e yazıyoruz.
          }
          catch (Exception hata)
          {
              MessageBox.Show("hata oluştu = "+hata);//yazamazsak hata alıcaz.
          }
          finally
          {
              memYaz.Read(oku,0,oku.Length);//memorystream den okuyoruz
              for (int i = 0; i < oku.Length; i++)
              {
                  ss += Convert.ToString(oku[i]);
              }
              MessageBox.Show(ss);
              memYaz.Close();//stream i kapatıyoruz.
          }

İpucu:byte string dönüşüm


byte [] dizi = Encoding.ASCII.GetBytes(“İbrahim”);
string Veri = Encoding.ASCII.GetString(dizi);
Stringi byte a çevirdik ve Byte ı ise tekrar stringe çevirdik.