SlideShare a Scribd company logo
1 of 3
meslek sırrı MOBİL PROGRAMLAMA
PCWORLD.COM.TR TEMMUZ ’10114
Volkan Atasever
volkan@volkanatasever.com
www.volkanatasever.com
Bu ayki yazıma başlamadan önce
okuyucularımızın bilmesi gere-
ken önemli noktalar mevcut. Baktığı-
mız zaman dergiyi yeni okumaya baş-
lamış okuyuculardan e-postalar almak-
yız. Çoğunlukla her ayki konuyu birbi-
rinden bağımsız ve tek ayda ortaya bir
uygulama koyabilecek şekilde yazıyo-
ruz. Yeni okumaya başlayanlar da her
ayki yazıyı ve bilgileri okuyarak bir giriş
yapabilir. Ama yaptığımız uygulamala-
rın hangi ortamda çalıştığını deneyim-
li olmayan bir kullanıcı anlayamayabili-
yor. Bunun için her ay uygulamayı yap-
tığımız platform hakkında küçük bilgi-
ler vereceğiz. Uygulamaları Windows
Mobile Professional 6.0 üstünde ge-
liştirmekteyiz. Çeşitli cihazlarda bu iş-
letim sistemini çalıştırıyor. Daha tam
oturmamış Windows Phone 7 serisi
için geliştirme araçları sürülmüş fakat
ilk aşamada yeni başlayanların otur-
mamış bir sistemde çalışması zorluklar
getirebiliyor. Şahsım adına Windows
Mobile 6.5 işletim sistemini ise bir ge-
çiş süreci olarak görmekteyim. Win-
dows Mobile 6.0’dan Windows Phone
7 serisini yumuşatmak adına yapılmış
olduğunu görüyoruz. Eski kullanıcılar
yıllar önce ki Windows 98’in hakimiye-
tini hatırlayacaklardır. Windows XP’ye
geçiş sert bir şekilde olmamış arasü-
rümlerle geçiş bizim için kolaylaştırıl-
mıştı. Bu sürümler Windows 98 SE ve
Windows ME işletim sistemleriydi. Ge-
liştiricilerin veya “geek” tabir ettiğimiz
bu işlerle hobi olarak ilgilenen okuyu-
cuların ufkunu açmak adına standart
rutinimizde molalar verip Windows
Phone 7 serisine ve java destekli mobil
cihazlara da değineceğiz. 3 aylık oku-
ma ve yazma, dosya işlemleri serimize
ise bu ayki stream işlemlerine değine-
rek sonlandıracağız. Bu sayede verileri-
mizi saklayabileceğimiz aynı zamanda
depolanan küçük verilerle işlem yapa-
bileceğiz. Bu ayki konunun künye kar-
tını yazmak istiyorum;
İşletim sistemi: Windows Mobile 6.0
Professional
Cihaz: İşletim sistemi çalışan her cihaz
Kullanılan programlama dili: C#
Framework: .NET Compact
Framework 3.5
Konu: Streamler (Akışlar)
Streamler ile çalışmak
Stream sınıfını System.IO içindeki bir
temel sınıf olarak tanımlayabiliriz.
System.IO altında tanımlanmış Stre-
am aynı zamanda bir özet sınıftır. Tek
başına bu sınıfı türetemezsiniz. Fakat
bu sınıftan diğer işlemlerimizi yoğun
olarak yapacağımız sınıflar türemiş-
tir. Bunlar; FileStream, MemoryStre-
am, StreamWriter, StreamReader, Bi-
naryWriter, BinaryReader, StringWri-
ter ve StringReader’dır. Çoğu sınıfta
bu sınıfın temel metodları kullanılıyor.
Stream’ler herhangi bir dosyayı IO (in-
put output) işlemleri yaparken gördü-
ğü gibi aynı zamanda klavye, ekran
vb. elemanlar üzerinde de işlem ya-
pabilir. Bu dosya işlemlerini inceleme-
den önce FileMode ve Encoding kav-
ramları önem taşıyor. Bunlara değine-
cek olursak;
Encoding kavramı ve
Encoding sınıfı
Encoding kavramının önemi İngilizce
dışında çeşitli dillerle çalışıldığı zaman
anlaşılır. Herhangi bir İngilizce Win-
dows Mobile yüklü bir akıllı cihazda
Türkçe karakter içeren dosyayı kullan-
mak istersek encoding sınıfını kullan-
mamız gerekiyor. Bu sayede tüm ma-
kinelerde Türkçe karakterler sorunsuz
görüntülenebilecektir.
FileMode liste
(Enumeration)
Bir dosya ile işlem yapmadan önce o
dosyanın yeniden oluşturulup oluştu-
rulmayacağı ya da dosya mevcut ise
mevcut dosya içerisinde işlem yapılıp
yapılmayacağı bilgisini veren listedir.
FileAccess liste
(Enumeration):
Bu dosya ile hangi işlemin yapılabilece-
ğini önceden belirtmek için kullandığı-
mız bir listedir. Bu işlemler okuma, yaz-
ma gibi işlemlerdir.
FileAccess.Read: Dosyadan okunaca-
ğını belirtir.
FileAccess.ReadWrite: Dosya ile hem
okuma hem de yazma işlemleri
yapılacağını belirtir.
FileAccess.Write: Dosya ile yazma
işlemi yapacağını belirtir.
Artık elimizde tüm işlemlerimizi yapa-
bileceğimiz bilgiler bulunuyor. Alet
çantamız tıka basa dolu. Kısaca artık
bir dosya işlemini yapma ve bunlar üs-
tünde inşa yapma vakti geldi. Başlan-
gıç olarak tüm dosya işlemlerini yapa-
bildiğimiz FileStream sınıfını tanıtıp di-
ğer sınıflarında özetini geçeceğiz. Hep-
1
2
Bu ayki yazımızda dosya işlemleri, streamler, dizin işlemleri gibi konuları işliyoruz.
Windows Mobile’da Stream
mobil programlama_temmuz.indd 114mobil programlama_temmuz.indd 114 24.06.2010 23:2224.06.2010 23:22
meslek sırrı MOBİL PROGRAMLAMA
115PCWORLD.COM.TRTEMMUZ ’10
sinin uygulamasını içeren bir örnek ise
dosya işlemlerini pratiğe dökmek için
önem kazanıyor.
FileStream Sınıfı: FileStream sınıfı-
nı oluşturmak için öncelikle bir patika
yani yol belirlememiz lazım. Ardından
en kısa tanımıyla dosyayı açma modu-
nu belirlememiz lazım. Bunun için File-
Mode listesini kullanıyoruz. Diğer kulla-
nımlar için 5 aşırı yüklenmiş kurucu me-
todu mevcud. Bir dosya üzerinde senk-
ron veya asenkron çalışmak için diğer
aşırı yüklenmiş kurucularını çalıştırma-
mız gereklidir.
MemoryStream Sınıfı: FileStream ile
yaptığımız işlemleri bir dosya üzerinde
yapmak yerine bellek üzerinde gerçek-
leştirdiğimizi düşünebiliriz. 7 tane aşırı
yüklenmiş kurucu metoda sahip.
StreamWriter Sınıfı: StreamWriter sı-
nıfı ile kodlanmış karakter çıktıları ile
birlikte çalışabiliriz. Bu işlemler için üre-
tilmiş bir sınıftır.
StreamReader Sınıfı: Bu sınıfla be-
raber stream olan bir veriyi string ifa-
de olarak okuyabiliriz. Read() ReadLi-
ne() ve ReadToEnd gibi esnek metod-
ları mevcuttur. Read metodu bir karak-
ter okumamızı sağlarken ReadLine bir
satırı okuyor. ReadToEnd ise mevcut
pozisyondan stream’in sonuna kadar
okuma yapıyor.
StringWriter Sınıfı: Bu sınıf TextWri-
ter sınfından türemiş. Encoding yani
belirli bir formatta kodlanmış veriyi
string olarak yazmaya yarıyor. Sınıf içe-
risinde bulunan metodları Resim 3’te
görebilirsiniz.
StringReader Sınıfı: Bu sınıf TextRe-
ader sınıfından türemiştir. Encoding
yani belirli bir formatta kodlanmış ve-
riyi string olarak okumaya yarar. Sınıf
içerisinde bulunan metodlar ise 4. re-
simde görülebilir.
Temel uygulamanın örnek kodu:
C# Kodu:
using System;
using System.Windows.Forms;
using System.IO;
using System.Text;
namespace STEMMUZDeviceProject24
{
public partial class Form1 :
Form
{
public Form1()
{
InitializeCompo
nent();
}
private void button1_
Click(object sender, EventArgs e)
{
FileStream fs = new
FileStream(“volkan.txt”,FileMode.
Open);
string icerik=””;
byte[] dizi=new
byte[fs.Length];
fs.Read(dizi, 0,
dizi.Length);
icerik = Encoding.
Unicode.GetString(dizi, 0, dizi.
Length);
textBox1.Text=icerik;
fs.Close();
}
private void button2_
Click(object sender, EventArgs e)
{
FileStream fs = new
FileStream(“volkan.txt”, FileMo
de.Create);
string icerik = text
Box1.Text;
byte[] dizi = Enco
ding.Unicode.GetBytes(icerik);
fs.Write(dizi, 0,
dizi.Length);
fs.Close();
}
private void button3_
Click(object sender, EventArgs e)
{
MemoryStream mems=new
MemoryStream();
3 5
4
mobil programlama_temmuz.indd 115mobil programlama_temmuz.indd 115 24.06.2010 23:2224.06.2010 23:22
meslek sırrı MOBİL PROGRAMLAMA
PCWORLD.COM.TR TEMMUZ ’10116
byte[] dizi = mems.
GetBuffer();
string okunan = Enco
ding.Unicode.GetString(dizi, 0,
dizi.Length);
mems.Close();
}
private void button4_
Click(object sender, EventArgs e)
{
MemoryStream mems =
new MemoryStream();
string yazilan =
textBox1.Text;
byte[] dizi = Enco
ding.Unicode.GetBytes(yazilan);
mems.Write(dizi, 0,
dizi.Length);
}
private void button5_
Click(object sender, EventArgs e)
{
FileStream fs = File.
Create(“volkan.txt”);
StreamWriter writer
= new StreamWriter(fs, Encoding.
Unicode);
writer.
WriteLine(“deneme”);
writer.Close();
}
private void button6_
Click(object sender, EventArgs e)
{
string deger = “”;
StreamReader rea
der = new StreamReader(File.
Open(“volkan.txt”, FileMode.
Open), Encoding.Unicode);
deger = reader.Read
ToEnd();
reader.Close();
MessageBox.
Show(deger);
}
private void button7_
Click(object sender, EventArgs e)
{
FileStream fs = new
FileStream(“volkan.txt”, FileMo
de.Create);
BinaryWriter writer =
new BinaryWriter(fs, Encoding.AS
CII);
string deger = “mer
haba dünya”;
writer.Write(deger);
writer.Close();
}
private void button8_
Click(object sender, EventArgs e)
{
FileStream fs = new
FileStream(“volkan.txt”, FileMo
de.Open);
BinaryReader reader =
new BinaryReader(fs, Encoding.AS
CII);
string deger = rea
der.ReadString();
reader.Close();
MessageBox.
Show(deger);
}
private void menuItem1_
Click(object sender, EventArgs e)
{
MessageBox.
Show(“dosyalar hakkında...”);
}
private void menuItem2_
Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}
FileStream Okuma (Buton 1): Bu
bölümde volkan.txt dosyasını okumak
için açıyoruz. Dikkat edilmesi gereken
husus uygulama neredeyse o klasörün
altında dosyayı arıyor. Length özelliği
ile FileStream’in uzunluğunu öğrenip o
uzunlukta bir byte dizisi oluşturuyoruz.
Read metodu ile de stream içerisindeki
byte bloğunu okuyup byte dizimize ya-
zıyoruz. Ardından unicode kodlaması
ile bu diziyi bir string değişkene atıyo-
ruz. Son olarak bu değişkeni textbox
kontrolünde göstermekteyiz.
FileStream Yazma (Buton 2): Bu me-
todda FileMode listesi ile yeni bir dosya-
nın oluşturulacağı... Aynı isimle bir dos-
ya mevcutsa üstüne yazacağımızı belir-
tiyoruz. Textbox kontrolünden içeriği
alıp bunu Unicode kodlaması ile bera-
ber bir byte dizisine aktarıyoruz. Türe-
tilmiş nesne olan FileStrream üzerinden
ise Write() metodunu çağırarak bu dizi-
yi dosyaya yazıyoruz.
MemoryStream Okuma(Buton 3):
MemoryStream sınfından bir nesne ta-
nılıyoruz. GetBuffer() metodunu kulla-
narak bellekte oluşturulmuş stream’i
bir byte dizisi olarak alıyoruz. Unico-
de kodlamasını kullanarak bir string di-
ziye yazıyoruz. Close() metodu ile ise
MemoryStream’i kapatıyoruz.
MemoryStream Yazma (Buton 4):
Textbox’teki metni Unicode standart-
larında kodlayarak bir byte dizisine atı-
yoruz. Write metodu ile mevcut stre-
am üzerine byte bloğu olarak yazıyo-
ruz. Diğer alternatiflerse WriteTo() me-
todu, WriteByte() metodu. Bu metod-
lardan WriteTo, MemoryStream’in bü-
tün içeriğini stream’e yazıyor. WriteBy-
te ise stream üzerindeki o anda bulunu-
lan pozisyona bir byte yazıyor.
StreamWriter (Buton 5): FileStream
ile açtığımız dosyayı WriteLine() meto-
dunu kullanarak yeni bir satır oluşturup
yazar.
StreamReader (Buton 6): ReadTo-
End() metodu mevcut dosyadaki mev-
cut pozisyon başlayarak sonuna kadar
okur ve geriye string değeri döndürür.
Bu dosyanın bir stream olarak sunuldu-
ğu unutulmamalı.
BinaryWriter (Buton 7): ASCII kod-
laması kullanarak dosyayı binary for-
matta yazar. Write metodu ile mevcut
stream’in üzerine değeri yazar.
BinaryReader (Buton 8): ASCII kod-
laması kullanarak dosyayı binary for-
matta okur. ReadString() metodu ile
mevcut dosyanın yani verebileceği-
miz bir stream’in bir sonraki string ti-
pini okur. Kullanılan kodlama ve string
ifadenin uzunluğunu göz önüne alarak
stream’inde mevcut pozisyonunu de-
ğiştirir. 
mobil programlama_temmuz.indd 116mobil programlama_temmuz.indd 116 24.06.2010 23:2224.06.2010 23:22

More Related Content

Similar to 2010 07

İleri Seviye Programlama 2
İleri Seviye Programlama 2İleri Seviye Programlama 2
İleri Seviye Programlama 2Caner Bovatekin
 
A'dan Z'ye | Social Engineer Toolkit (SET)
A'dan Z'ye | Social Engineer Toolkit (SET)A'dan Z'ye | Social Engineer Toolkit (SET)
A'dan Z'ye | Social Engineer Toolkit (SET)TurkHackTeam EDU
 
1 pardus işletim_sistemi
1 pardus işletim_sistemi1 pardus işletim_sistemi
1 pardus işletim_sistemiBirtan Yıldız
 
Web Uygulamalarında Kaynak Kod Analizi - 1
Web Uygulamalarında Kaynak Kod Analizi - 1Web Uygulamalarında Kaynak Kod Analizi - 1
Web Uygulamalarında Kaynak Kod Analizi - 1Mehmet Ince
 
Android'e Giriş Eğitimleri 1_1
Android'e Giriş Eğitimleri 1_1Android'e Giriş Eğitimleri 1_1
Android'e Giriş Eğitimleri 1_1Univerist
 
Veritabanı kurulumu (1)
Veritabanı kurulumu (1)Veritabanı kurulumu (1)
Veritabanı kurulumu (1)alinizam99
 
Adli bilisim dergisi_sayi_1
Adli bilisim dergisi_sayi_1Adli bilisim dergisi_sayi_1
Adli bilisim dergisi_sayi_1Zahid Alperen
 
Adli Bilisim Okumalari
Adli Bilisim OkumalariAdli Bilisim Okumalari
Adli Bilisim Okumalarismapto
 
Android mimari-cekirdek-binding-scheduler
Android mimari-cekirdek-binding-schedulerAndroid mimari-cekirdek-binding-scheduler
Android mimari-cekirdek-binding-schedulerErcan Pinar
 

Similar to 2010 07 (20)

Sunu (1)
Sunu (1)Sunu (1)
Sunu (1)
 
delphi
delphidelphi
delphi
 
14
1414
14
 
delphi xe5
delphi xe5 delphi xe5
delphi xe5
 
İleri Seviye Programlama 2
İleri Seviye Programlama 2İleri Seviye Programlama 2
İleri Seviye Programlama 2
 
A'dan Z'ye | Social Engineer Toolkit (SET)
A'dan Z'ye | Social Engineer Toolkit (SET)A'dan Z'ye | Social Engineer Toolkit (SET)
A'dan Z'ye | Social Engineer Toolkit (SET)
 
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
 
Ip2 vi̇ze2
Ip2 vi̇ze2Ip2 vi̇ze2
Ip2 vi̇ze2
 
final
finalfinal
final
 
Bilgisayarkullanımı.ppt_ 3
Bilgisayarkullanımı.ppt_ 3Bilgisayarkullanımı.ppt_ 3
Bilgisayarkullanımı.ppt_ 3
 
1 pardus işletim_sistemi
1 pardus işletim_sistemi1 pardus işletim_sistemi
1 pardus işletim_sistemi
 
Linux101
Linux101Linux101
Linux101
 
Web Uygulamalarında Kaynak Kod Analizi - 1
Web Uygulamalarında Kaynak Kod Analizi - 1Web Uygulamalarında Kaynak Kod Analizi - 1
Web Uygulamalarında Kaynak Kod Analizi - 1
 
Web Application Testing
Web Application Testing Web Application Testing
Web Application Testing
 
Android'e Giriş Eğitimleri 1_1
Android'e Giriş Eğitimleri 1_1Android'e Giriş Eğitimleri 1_1
Android'e Giriş Eğitimleri 1_1
 
Veritabanı kurulumu (1)
Veritabanı kurulumu (1)Veritabanı kurulumu (1)
Veritabanı kurulumu (1)
 
Adli bilisim dergisi_sayi_1
Adli bilisim dergisi_sayi_1Adli bilisim dergisi_sayi_1
Adli bilisim dergisi_sayi_1
 
Adli Bilisim Okumalari
Adli Bilisim OkumalariAdli Bilisim Okumalari
Adli Bilisim Okumalari
 
C dosya-isleme
C dosya-islemeC dosya-isleme
C dosya-isleme
 
Android mimari-cekirdek-binding-scheduler
Android mimari-cekirdek-binding-schedulerAndroid mimari-cekirdek-binding-scheduler
Android mimari-cekirdek-binding-scheduler
 

More from Volkan Atasever

More from Volkan Atasever (10)

Bitsector 3
Bitsector 3Bitsector 3
Bitsector 3
 
Bitsector 2
Bitsector 2Bitsector 2
Bitsector 2
 
Bitsector Sayı 01
Bitsector Sayı 01Bitsector Sayı 01
Bitsector Sayı 01
 
Semih Arslan'ın Volkan Atasever ile Röportajı
Semih Arslan'ın Volkan Atasever ile RöportajıSemih Arslan'ın Volkan Atasever ile Röportajı
Semih Arslan'ın Volkan Atasever ile Röportajı
 
T3 Dergisi Haziran 2013 yazım
T3 Dergisi Haziran 2013 yazımT3 Dergisi Haziran 2013 yazım
T3 Dergisi Haziran 2013 yazım
 
Ti ks vb v1.0
Ti ks vb v1.0Ti ks vb v1.0
Ti ks vb v1.0
 
Tiks cs v1.0
Tiks cs v1.0Tiks cs v1.0
Tiks cs v1.0
 
Teknolojinin Geleceği
Teknolojinin GeleceğiTeknolojinin Geleceği
Teknolojinin Geleceği
 
Csharp 3.0
Csharp 3.0Csharp 3.0
Csharp 3.0
 
Kariyer Günleri
Kariyer GünleriKariyer Günleri
Kariyer Günleri
 

2010 07

  • 1. meslek sırrı MOBİL PROGRAMLAMA PCWORLD.COM.TR TEMMUZ ’10114 Volkan Atasever volkan@volkanatasever.com www.volkanatasever.com Bu ayki yazıma başlamadan önce okuyucularımızın bilmesi gere- ken önemli noktalar mevcut. Baktığı- mız zaman dergiyi yeni okumaya baş- lamış okuyuculardan e-postalar almak- yız. Çoğunlukla her ayki konuyu birbi- rinden bağımsız ve tek ayda ortaya bir uygulama koyabilecek şekilde yazıyo- ruz. Yeni okumaya başlayanlar da her ayki yazıyı ve bilgileri okuyarak bir giriş yapabilir. Ama yaptığımız uygulamala- rın hangi ortamda çalıştığını deneyim- li olmayan bir kullanıcı anlayamayabili- yor. Bunun için her ay uygulamayı yap- tığımız platform hakkında küçük bilgi- ler vereceğiz. Uygulamaları Windows Mobile Professional 6.0 üstünde ge- liştirmekteyiz. Çeşitli cihazlarda bu iş- letim sistemini çalıştırıyor. Daha tam oturmamış Windows Phone 7 serisi için geliştirme araçları sürülmüş fakat ilk aşamada yeni başlayanların otur- mamış bir sistemde çalışması zorluklar getirebiliyor. Şahsım adına Windows Mobile 6.5 işletim sistemini ise bir ge- çiş süreci olarak görmekteyim. Win- dows Mobile 6.0’dan Windows Phone 7 serisini yumuşatmak adına yapılmış olduğunu görüyoruz. Eski kullanıcılar yıllar önce ki Windows 98’in hakimiye- tini hatırlayacaklardır. Windows XP’ye geçiş sert bir şekilde olmamış arasü- rümlerle geçiş bizim için kolaylaştırıl- mıştı. Bu sürümler Windows 98 SE ve Windows ME işletim sistemleriydi. Ge- liştiricilerin veya “geek” tabir ettiğimiz bu işlerle hobi olarak ilgilenen okuyu- cuların ufkunu açmak adına standart rutinimizde molalar verip Windows Phone 7 serisine ve java destekli mobil cihazlara da değineceğiz. 3 aylık oku- ma ve yazma, dosya işlemleri serimize ise bu ayki stream işlemlerine değine- rek sonlandıracağız. Bu sayede verileri- mizi saklayabileceğimiz aynı zamanda depolanan küçük verilerle işlem yapa- bileceğiz. Bu ayki konunun künye kar- tını yazmak istiyorum; İşletim sistemi: Windows Mobile 6.0 Professional Cihaz: İşletim sistemi çalışan her cihaz Kullanılan programlama dili: C# Framework: .NET Compact Framework 3.5 Konu: Streamler (Akışlar) Streamler ile çalışmak Stream sınıfını System.IO içindeki bir temel sınıf olarak tanımlayabiliriz. System.IO altında tanımlanmış Stre- am aynı zamanda bir özet sınıftır. Tek başına bu sınıfı türetemezsiniz. Fakat bu sınıftan diğer işlemlerimizi yoğun olarak yapacağımız sınıflar türemiş- tir. Bunlar; FileStream, MemoryStre- am, StreamWriter, StreamReader, Bi- naryWriter, BinaryReader, StringWri- ter ve StringReader’dır. Çoğu sınıfta bu sınıfın temel metodları kullanılıyor. Stream’ler herhangi bir dosyayı IO (in- put output) işlemleri yaparken gördü- ğü gibi aynı zamanda klavye, ekran vb. elemanlar üzerinde de işlem ya- pabilir. Bu dosya işlemlerini inceleme- den önce FileMode ve Encoding kav- ramları önem taşıyor. Bunlara değine- cek olursak; Encoding kavramı ve Encoding sınıfı Encoding kavramının önemi İngilizce dışında çeşitli dillerle çalışıldığı zaman anlaşılır. Herhangi bir İngilizce Win- dows Mobile yüklü bir akıllı cihazda Türkçe karakter içeren dosyayı kullan- mak istersek encoding sınıfını kullan- mamız gerekiyor. Bu sayede tüm ma- kinelerde Türkçe karakterler sorunsuz görüntülenebilecektir. FileMode liste (Enumeration) Bir dosya ile işlem yapmadan önce o dosyanın yeniden oluşturulup oluştu- rulmayacağı ya da dosya mevcut ise mevcut dosya içerisinde işlem yapılıp yapılmayacağı bilgisini veren listedir. FileAccess liste (Enumeration): Bu dosya ile hangi işlemin yapılabilece- ğini önceden belirtmek için kullandığı- mız bir listedir. Bu işlemler okuma, yaz- ma gibi işlemlerdir. FileAccess.Read: Dosyadan okunaca- ğını belirtir. FileAccess.ReadWrite: Dosya ile hem okuma hem de yazma işlemleri yapılacağını belirtir. FileAccess.Write: Dosya ile yazma işlemi yapacağını belirtir. Artık elimizde tüm işlemlerimizi yapa- bileceğimiz bilgiler bulunuyor. Alet çantamız tıka basa dolu. Kısaca artık bir dosya işlemini yapma ve bunlar üs- tünde inşa yapma vakti geldi. Başlan- gıç olarak tüm dosya işlemlerini yapa- bildiğimiz FileStream sınıfını tanıtıp di- ğer sınıflarında özetini geçeceğiz. Hep- 1 2 Bu ayki yazımızda dosya işlemleri, streamler, dizin işlemleri gibi konuları işliyoruz. Windows Mobile’da Stream mobil programlama_temmuz.indd 114mobil programlama_temmuz.indd 114 24.06.2010 23:2224.06.2010 23:22
  • 2. meslek sırrı MOBİL PROGRAMLAMA 115PCWORLD.COM.TRTEMMUZ ’10 sinin uygulamasını içeren bir örnek ise dosya işlemlerini pratiğe dökmek için önem kazanıyor. FileStream Sınıfı: FileStream sınıfı- nı oluşturmak için öncelikle bir patika yani yol belirlememiz lazım. Ardından en kısa tanımıyla dosyayı açma modu- nu belirlememiz lazım. Bunun için File- Mode listesini kullanıyoruz. Diğer kulla- nımlar için 5 aşırı yüklenmiş kurucu me- todu mevcud. Bir dosya üzerinde senk- ron veya asenkron çalışmak için diğer aşırı yüklenmiş kurucularını çalıştırma- mız gereklidir. MemoryStream Sınıfı: FileStream ile yaptığımız işlemleri bir dosya üzerinde yapmak yerine bellek üzerinde gerçek- leştirdiğimizi düşünebiliriz. 7 tane aşırı yüklenmiş kurucu metoda sahip. StreamWriter Sınıfı: StreamWriter sı- nıfı ile kodlanmış karakter çıktıları ile birlikte çalışabiliriz. Bu işlemler için üre- tilmiş bir sınıftır. StreamReader Sınıfı: Bu sınıfla be- raber stream olan bir veriyi string ifa- de olarak okuyabiliriz. Read() ReadLi- ne() ve ReadToEnd gibi esnek metod- ları mevcuttur. Read metodu bir karak- ter okumamızı sağlarken ReadLine bir satırı okuyor. ReadToEnd ise mevcut pozisyondan stream’in sonuna kadar okuma yapıyor. StringWriter Sınıfı: Bu sınıf TextWri- ter sınfından türemiş. Encoding yani belirli bir formatta kodlanmış veriyi string olarak yazmaya yarıyor. Sınıf içe- risinde bulunan metodları Resim 3’te görebilirsiniz. StringReader Sınıfı: Bu sınıf TextRe- ader sınıfından türemiştir. Encoding yani belirli bir formatta kodlanmış ve- riyi string olarak okumaya yarar. Sınıf içerisinde bulunan metodlar ise 4. re- simde görülebilir. Temel uygulamanın örnek kodu: C# Kodu: using System; using System.Windows.Forms; using System.IO; using System.Text; namespace STEMMUZDeviceProject24 { public partial class Form1 : Form { public Form1() { InitializeCompo nent(); } private void button1_ Click(object sender, EventArgs e) { FileStream fs = new FileStream(“volkan.txt”,FileMode. Open); string icerik=””; byte[] dizi=new byte[fs.Length]; fs.Read(dizi, 0, dizi.Length); icerik = Encoding. Unicode.GetString(dizi, 0, dizi. Length); textBox1.Text=icerik; fs.Close(); } private void button2_ Click(object sender, EventArgs e) { FileStream fs = new FileStream(“volkan.txt”, FileMo de.Create); string icerik = text Box1.Text; byte[] dizi = Enco ding.Unicode.GetBytes(icerik); fs.Write(dizi, 0, dizi.Length); fs.Close(); } private void button3_ Click(object sender, EventArgs e) { MemoryStream mems=new MemoryStream(); 3 5 4 mobil programlama_temmuz.indd 115mobil programlama_temmuz.indd 115 24.06.2010 23:2224.06.2010 23:22
  • 3. meslek sırrı MOBİL PROGRAMLAMA PCWORLD.COM.TR TEMMUZ ’10116 byte[] dizi = mems. GetBuffer(); string okunan = Enco ding.Unicode.GetString(dizi, 0, dizi.Length); mems.Close(); } private void button4_ Click(object sender, EventArgs e) { MemoryStream mems = new MemoryStream(); string yazilan = textBox1.Text; byte[] dizi = Enco ding.Unicode.GetBytes(yazilan); mems.Write(dizi, 0, dizi.Length); } private void button5_ Click(object sender, EventArgs e) { FileStream fs = File. Create(“volkan.txt”); StreamWriter writer = new StreamWriter(fs, Encoding. Unicode); writer. WriteLine(“deneme”); writer.Close(); } private void button6_ Click(object sender, EventArgs e) { string deger = “”; StreamReader rea der = new StreamReader(File. Open(“volkan.txt”, FileMode. Open), Encoding.Unicode); deger = reader.Read ToEnd(); reader.Close(); MessageBox. Show(deger); } private void button7_ Click(object sender, EventArgs e) { FileStream fs = new FileStream(“volkan.txt”, FileMo de.Create); BinaryWriter writer = new BinaryWriter(fs, Encoding.AS CII); string deger = “mer haba dünya”; writer.Write(deger); writer.Close(); } private void button8_ Click(object sender, EventArgs e) { FileStream fs = new FileStream(“volkan.txt”, FileMo de.Open); BinaryReader reader = new BinaryReader(fs, Encoding.AS CII); string deger = rea der.ReadString(); reader.Close(); MessageBox. Show(deger); } private void menuItem1_ Click(object sender, EventArgs e) { MessageBox. Show(“dosyalar hakkında...”); } private void menuItem2_ Click(object sender, EventArgs e) { Application.Exit(); } } } FileStream Okuma (Buton 1): Bu bölümde volkan.txt dosyasını okumak için açıyoruz. Dikkat edilmesi gereken husus uygulama neredeyse o klasörün altında dosyayı arıyor. Length özelliği ile FileStream’in uzunluğunu öğrenip o uzunlukta bir byte dizisi oluşturuyoruz. Read metodu ile de stream içerisindeki byte bloğunu okuyup byte dizimize ya- zıyoruz. Ardından unicode kodlaması ile bu diziyi bir string değişkene atıyo- ruz. Son olarak bu değişkeni textbox kontrolünde göstermekteyiz. FileStream Yazma (Buton 2): Bu me- todda FileMode listesi ile yeni bir dosya- nın oluşturulacağı... Aynı isimle bir dos- ya mevcutsa üstüne yazacağımızı belir- tiyoruz. Textbox kontrolünden içeriği alıp bunu Unicode kodlaması ile bera- ber bir byte dizisine aktarıyoruz. Türe- tilmiş nesne olan FileStrream üzerinden ise Write() metodunu çağırarak bu dizi- yi dosyaya yazıyoruz. MemoryStream Okuma(Buton 3): MemoryStream sınfından bir nesne ta- nılıyoruz. GetBuffer() metodunu kulla- narak bellekte oluşturulmuş stream’i bir byte dizisi olarak alıyoruz. Unico- de kodlamasını kullanarak bir string di- ziye yazıyoruz. Close() metodu ile ise MemoryStream’i kapatıyoruz. MemoryStream Yazma (Buton 4): Textbox’teki metni Unicode standart- larında kodlayarak bir byte dizisine atı- yoruz. Write metodu ile mevcut stre- am üzerine byte bloğu olarak yazıyo- ruz. Diğer alternatiflerse WriteTo() me- todu, WriteByte() metodu. Bu metod- lardan WriteTo, MemoryStream’in bü- tün içeriğini stream’e yazıyor. WriteBy- te ise stream üzerindeki o anda bulunu- lan pozisyona bir byte yazıyor. StreamWriter (Buton 5): FileStream ile açtığımız dosyayı WriteLine() meto- dunu kullanarak yeni bir satır oluşturup yazar. StreamReader (Buton 6): ReadTo- End() metodu mevcut dosyadaki mev- cut pozisyon başlayarak sonuna kadar okur ve geriye string değeri döndürür. Bu dosyanın bir stream olarak sunuldu- ğu unutulmamalı. BinaryWriter (Buton 7): ASCII kod- laması kullanarak dosyayı binary for- matta yazar. Write metodu ile mevcut stream’in üzerine değeri yazar. BinaryReader (Buton 8): ASCII kod- laması kullanarak dosyayı binary for- matta okur. ReadString() metodu ile mevcut dosyanın yani verebileceği- miz bir stream’in bir sonraki string ti- pini okur. Kullanılan kodlama ve string ifadenin uzunluğunu göz önüne alarak stream’inde mevcut pozisyonunu de- ğiştirir.  mobil programlama_temmuz.indd 116mobil programlama_temmuz.indd 116 24.06.2010 23:2224.06.2010 23:22