1. meslek sırrı MOBİL PROGRAMLAMA
PCWORLD.COM.TR MAYIS ’10114
Volkan Atasever
volkan@volkanatasever.com
www.volkanatasever.com
Bu ayki yazımda artık yavaş yavaş
teknik derinliklere inmeye başla-
yabileceğiz. Baktığımız zaman bir uygu-
lama yazıp bunu cihazımıza aktarabil-
mekteyiz. Aynı zamanda sık kullanılan
kontrollere de hakimiz. Standart bir uy-
gulamayı rahatlıkla yazabiliriz. Tabii bu
genellikle bir işi yapan ve herhangi bir
XML veya Database kullanmayan bir
uygulama olacaktır. Küçük işlemler için
ise dosyalarla çalışmak da bir çözüm
olabilmektedir. Bu ayki yazımda okuma
ve yazma işlemlerine bir giriş yapaca-
ğım. Ardından yavaş yavaş tüm dosya
ve dizin yapısına hakim olmanızı amaç-
lamaktayım.
Okuma ve yazma işlemleri
Dosyalarla çalışırken ilk yapacağımız iş-
lem cihazın dizinlerine ve dizinlerle ilgi-
li sınıflarına hakim olmaktan geçer. Bu-
nun için .NET Compact Framework bize
Directory ve DirectoryInfo sınıflarını su-
nar. İçlerinde static metodlar barındıran
bu sınıflar sayesinde dizin işlemlerimizi
gerçekleştirebilmekteyiz. İki sınıf çok kü-
çük farklarla beraber benzerlik göster-
mektedir.
Directory Sınıfı
Directory sınıfını açıklarken sadece kod
parçaları ile değil kullanıcı arayüzü olan
bir uygulama ile açıklamak istiyorum.
Bunun için aşağıdaki arayüzü tasarımını-
za uygulayın. (Resim 1)
6 butonda Directory sınıfına ait işlem-
ler yapacağız. 6 click event’ine butonlar-
da gördüğümüz işlemleri yaptıracağız.
Şu anda dizin isimlerini kullanıcıdan al-
madan kendi örnek dizin isimlerimizi ko-
dun içine gömeceğiz. Directory sınıfına
ait static metodlarla yaptığımız uygula-
ma aşağıdadır. Butonların isimleri yuka-
rıdan aşağı doğru button1, button2,...
şeklinde verilmiştir. C# Kodu:
using System;
using System.Windows.Forms;
using System.IO;
Bu ayki yazımda okuma ve yazma işlemlerine bir giriş yapacağım. Ardından yavaş yavaş
tüm dosya ve dizin yapısına hakim olmanızı amaçlamaktayım.
Okuma ve Yazma İşlemleri
mobil programlama_mayis.indd 114mobil programlama_mayis.indd 114 26.04.2010 19:1226.04.2010 19:12
2. meslek sırrı MOBİL PROGRAMLAMA
115PCWORLD.COM.TRMAYIS ’10
namespace DirectorySinifi
{
public partial class Form1 :
Form
{
public Form1()
{
InitializeCompo
nent();
}
private void button1_
Click(object sender, EventArgs e)
{
Directory.
CreateDirectory(@”My Documents
deneme”);
MessageBox.
Show(“Deneme isimli dizin oluştu
ruldu”);
}
private void button2_
Click(object sender, EventArgs e)
{
if (Directory.
Exists(@”My Documentsdeneme”))
MessageBox.
Show(“deneme isimli bir dizin
kullanımda”);
else
MessageBox.
Show(“deneme isimli bir dizin
kullanımda değil”);
}
private void button3_
Click(object sender, EventArgs e)
{
string listele=””;
foreach (string
dosyaismi in Directory.
GetDirectories(“My Documents”))
{
listele += dosya
ismi + “-”;
}
MessageBox.
Show(listele);
}
private void button4_
Click(object sender, EventArgs e)
{
Directory.Move(@”My
Documentsdeneme”, @”My Docu
mentsPersonaldeneme”);
MessageBox.
Show(“Dizin My Documents altın
da Personal dizininin altına ta
şındı”);
}
private void button5_
Click(object sender, EventArgs e)
{
Directory.Delete(@”My
DocumentsPersonaldeneme”);
MessageBox.
Show(“Dizin silindi”);
}
private void button6_
Click(object sender, EventArgs e)
{
string
zaman=Directory.
GetCreationTime(@”My Documents
deneme”).ToString();
MessageBox.Show(“Bu
dizin”+ zaman+” tarihinde oluştu
ruldu”);
}
private void menuItem1_
Click(object sender, EventArgs e)
{
MessageBox.
Show(“Directory Sınıfı ile IO iş
lemleri...”);
}
private void menuItem2_
Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}
Uygulamamızı tamamladık. Directory
sınıfına ait işlemler gerçekleştirdiğimiz
bu uygulamanın her bir buton click ola-
yına directory sınfına ait bir işlem ger-
çekleştirdi. Bunun için her bir butonu
ayrı ayrı ele alarak ne yapıldığını ince-
leyeceğiz.
“Dizin Oluştur” Butonu (Buton 1):
Bu butona tıkladığımız zaman Directory
sınıfının static bir metodu olan Create-
Directory ile herhangi bir klasör oluştur-
duk. İsmi koda gömülü bir şekilde ver-
diğimiz gibi dinamik olarak bir textbox
ile veya kullanıcıdan herhangi bir seçim
yapmasını sağlayarak belirleyebilirsiniz.
”Dizin Mevcut mu?” Butonu (Buton
2): Bu butona oluşturduğumuz zaman
verdiğimiz dizinin o konumda mevcut
olup olmadığına bakmaktadır. If deyi-
mi içerisinde eğer mevcutsa “true” ola-
rak döner. Değilse if-else yapısında else
kısmına düşer.
“Dizin Listele” Butonu (Buton 3): Bir
“foreach” döngüsü sayesinde “getdi-
rectories” metodumuza parametre ola-
rak istediğimiz dizinin adresini veriyo-
ruz. Bu sayede “foreach” döngüsü her
çalıştığında bize altındaki dizinleri tek
tek verir. Bunları string olarak döndür-
düğümüz için herhangi bir string değiş-
kende sakladık. Ardından mesaj kutu
ile kullanıcıya gösterdik. Bir listbox ya-
pısı bu listeyi göstermek için daha şık
olabilirdi. Bir tree yapısı ise profesyonel
kullanımda daha çok etkileyici olur.
“Dizin Taşı” Butonu (Buton 4): Direc-
tory.Move metodumuz iki parametre
almaktadır. İlk parametre hangi dizinin
taşınacağı, ikinci parametre ise nereye
taşınacağı ile ilgilidir.
1
2
mobil programlama_mayis.indd 115mobil programlama_mayis.indd 115 26.04.2010 19:1226.04.2010 19:12
3. meslek sırrı MOBİL PROGRAMLAMA
PCWORLD.COM.TR MART ’10116
“Dizin Sil” Butonu (Buton 5): Direc-
tory.Delete metodu yolunu verdiğimiz
dizini siler.
“Dizin Oluşturma Bilgileri” Butonu
(Buton 6): Directory.GetCreationTime
(dizin yolu) ile yolunu verdiğimiz dizinin
oluşturulma bilgilerine ve tarihine ula-
şabilmekteyiz.
Directory sınıfındaki static
metodlardan bazıları
GetCurrentDirectory Metodu: O
anda çalışan uygulamanın hangi klasör-
de olduğunu bize geri döndürür.
GetLastAccessTime Metodu: Belirtti-
ğimiz dizine son erişim zamanını bize
geri döndürür.
GetLastWriteTime Metodu: Belirttiği-
miz dizine en son yapılan yazım zama-
nını bize geri döndürür.
DirectoryInfo Sınıfı
DirectoryInfo sınıfı Directory sınfıı ile
benzerlik göstermesine rağmen tüm
üyeleri static değildir. Bunun için sınıfı
canlandırmamız ve nesne olarak kullan-
mamız gerekir. Başka bir deyişle sınıfın
örneğini türetmemiz gerekiyor.
Öncelikle DirectoryInfo sınıfı ile en çok
kullanılan metodları bir uygulama üs-
tünde göstereceğiz. Bunun için önce-
likle kullanıcı arayüzümüzü oluşturalım.
(Resim 2)
Uygulamamız iki buton, bir textbox ve
bir listbox’dan oluşuyor. Uygulama-
da çıkabilmek ve uygulama bilgisi için
menuitem’lara bir çıkış ve DirectoryIn-
fo butonu ekledik. Formumuzun başlığı
ise konumuzla alakalı olarak Director-
yInfo Sınıfı ile IO şeklinde değiştirdik.
Arayüzden de anlayabileceğimiz gibi
textbox’a yazdığımız yazı alt dizinimi-
zim ismi olacak ve bizim belirlediğimiz
ve koda gömdüğümüz bir dizinin altın-
da oluşturulacak. Bu sayede kullanıcı-
dan alacağımız bir isimle dizin oluştura-
bileceğiz. Alt dizileri listele kısmında ise
bizim koda gömdüğümüz dizinin alt di-
zinleri listelenmiş olacak. (Resim 3) C#
Kodu:
using System;
using System.Windows.Forms;
using System.IO;
namespace DirectoryInfoileio
{
public partial class Form1 :
Form
{
public Form1()
{
InitializeCompo
nent();
}
private void Form1_
Load(object sender, EventArgs e)
{
DirectoryInfo dirin
fo = new DirectoryInfo(@”My Docu
mentsPersonaldeneme”);
dirinfo.Create();
}
private void button1_
Click(object sender, EventArgs e)
{
DirectoryInfo dirin
fo = new DirectoryInfo(@”My Docu
mentsPersonaldeneme”);
dirinfo.
CreateSubdirectory(textBox1.
Text);
MessageBox.
Show(textBox1.Text + “ isimli alt
dizin oluşturuldu”);
}
private void button2_
Click(object sender, EventArgs e)
{
DirectoryInfo dirin
fo = new DirectoryInfo(@”My Docu
mentsPersonaldeneme”);
foreach (DirectoryIn
fo info in dirinfo.GetDirectori
es())
{
listBox1.Items.
Add(info.Name);
}
}
private void menuItem1_
Click(object sender, EventArgs e)
{
MessageBox.
Show(“DirectoryInfo sınıfı ile IO
işlemleri...”);
}
private void menuItem2_
Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}
Uygulamanın
çalıştırılmış çıktısı
Uygulamayı üç bölümde incelersen bi-
rinci bölüm form’un load event’inde
yani form yüklenirken yapılan işlemler,
alt dizin oluştur butonuna basınca yapı-
lan işlemler ve alt dizinleri listele buto-
nuna basılınca yapılan işlemler olarak üç
bölümde inceleyebiliriz.
Form1_Load olayında da gördüğünüz
gibi form yüklenirken My Documents
Personal altında deneme isimli bir dizin
oluşturuluyor. Uygulamanın geri kalan
kısmındaki işlemlerde bu dizin üstünden
gerçekleştirilmiştir.
Form1_Load olayında DirectoryInfo sını-
fını türetirken bir dizin ismi belirledik. Di-
rinfo.create metodu ile ise bu dizin oluş-
turuldu.
Alt dizin oluştur butonunda ise, yine be-
lirlediğimiz dizin üstünde çalışmaya baş-
ladık. CreateSubDirectory metodu ile ise
textbox’da kullanıcıdan alınan isimle bir
dizin oluşturuldu. Foreach döngüsü yar-
dımıyla ise GetDirectories() metodunu
kullanarak gösterdiğimiz dizinin altdizin-
lerini listeleyebildik. Listeyi ise bir listbox
aracılığıyla kullanıcıyla paylaşmış olduk.
Bu ay dosyalarla okuma yazma işlemle-
rini yapmak için dizinlerle ilgili işlemle-
rimizden bahsettik. Yeri geldiği zaman
daha ince noktalara da değineceğim.
Dizinler okuma yazma işlemlerini yap-
mak için ilk adım olmak durumundadır-
lar. Eğer dizin işlemlerine hakim değilsek
diğer dosya durumlarına da hakim ola-
mayız.
3
mobil programlama_mayis.indd 116mobil programlama_mayis.indd 116 26.04.2010 19:1226.04.2010 19:12