dosya ve İŞ İ - wordpress.com...alan directory, directoryinfo, file, fileinfo, streamreader ve...
TRANSCRIPT
ÜNİTE
8
DOSYA VE KLASÖR İŞLEMLERİ
İÇİNDEK
İLER • Dosya ve Klasör İşlemleri
• Klasör Sınıfları (Directory ve DirectoryInfo)
• Dosya Sınıfları (File ve FileInfo)
• Dosyalarda Okuma Ve Yazma İşemi Yapabilen Sınıflar (FileStream, StreamReader ve StreamWriter)
HED
EFLER
•Bu üniteyi çalıştıktan sonra;
•Klasör ve dosya sınıflarına ait metotları anlayabilecek,
•Yeni klasör ve dosya tanımlayarak, kopyalama,silme ve taşıma işlemleri yapabilecek,
•Dosyalara bilgi yazabilecek ve onları okuyabileceksiniz.
NESNE TABANLI
PROGRAMLAMA – I
Okt. Mustafa AKBUĞA
Dosya ve Klasör işlemleri
Atatürk Üniversitesi Açıköğretim Fakültesi 2
GİRİŞ
Bilgisayar sistemlerinde kayıtlı veriler, genellikle dosya ve klasörler
yardımıyla organize edilir. Bilgisayar yazılımları verilere ihtiyaç duyduklarında ya
klasörler içerisinde yer alan dosyaları okuyarak ya da klavye veya mouse gibi girdi
aygıtları kullanarak temin ederler. Programların çalışması sonucu ortaya çıkan yeni
sonuçlar ise Ekran veya Yazıcı gibi aygıtlar vasıtasıyla gösterilir ya da ilgili dosyalara
tekrar kaydedilir.
Programlama dilleri içerisinde yer alan girdi veya çıktı işlemlerine I/O
işlemleri denir ve bu terim İngilizce Input / Output ' un kısaltılması sonucu elde
edilir. Dosyaya bilgi kaydetmek, okumak, ekrana ya da yazıcıya bilgi yazdırmak gibi
işlemler birer I/O işlemlerdir. Visual C# dilinde de I/O sistemi ile ilgili tüm sınıflar
System.IO isim alanında yer alır.
Bu bölümde Visual C# programlama dilinde System.IO isim alanı içerisinde yer
alan Directory, DirectoryInfo, File, FileInfo, StreamReader ve SteamWriter gibi en
yaygın kullanılan sınıflar incelenecek ve bu sınıflarla ile fonksiyonlar ve metotlar
hakkında bilgiler verilecektir.
DOSYA VE KLASÖR İŞLEMLERİ
Disk üzerinde yer alan dosyalar genelde ya ana klasörde ya da sonradan
oluşturulan alt klasörler (dizin) içerisinde tutulur. Bu sebeple konu anlatımına
klasör sınıflarıyla başlanmıştır. Bilgisayar programları veri alma ve ya gönderme
işlemini stream (akım) denen, byte (8 bit) seviyesinde bilgi akışıyla gerçekleştirir.
Visual C# dilinde yapılan projelerde I/O sistemiyle ilgili tüm veri akımları, System.
IO isim alanında bulunan Stream sınıflarıyla gerçekleştirilir. Bu sınıflar genellikle
dosya ve klasör sınıflarıyla birlikte kullanılır ve dosyalar üzerinde hem okuma hem
de yazma işlemi yapılmasını kolaylaştırırlar.
Directory ve DirectoryInfo sınıfları klasörleri temsil ederken, File ve FileInfo
sınıfları dosyaları temsil etmektedir. Path sınıfı ise klasörler ve dosyaların yol (konum
adresleri) ile ilgili işlemler yapmakta kullanılır. Dosya ve Klasörler ile işlem yaparken
kullanılan sınıflara ait metot ve fonksiyonların derleyici tarafından tanınmasını
sağlamak için programın en başına şekil 8.1’deki gösterildiği şekliyle kodların
eklenmesi gerekir;
Şekil 8.1. Temel I/O sınıf kütüphanesinin program koduna eklenmesi
Visual C# Program
dilinde kod yazarken, ilk
satır using.System;
kodu ile başlar. Bu satır
temel sınıf
kütüphanelerinin
açılmasını sağlar.
Dosya ve Klasör işlemleri
Atatürk Üniversitesi Açıköğretim Fakültesi 3
Klasör Sınıfları
Klasör işlemleri, System. IO isim alanındaki Directory ve DirectoryInfo
sınıflarıyla yapılmaktadır. Bu sınıfların dosya işlemleri için kullanılan klasör
oluşturma, Bir yerden bir yere taşıma ve klasör özelliklerini değiştirme gibi birçok
metodu bulunmaktadır. Aşağıda bu metodlar ve en çok kullanılan sınıfların
kullanımlarıyla ilgili bilgiler verilmektedir.
CreateDirectory ( ) Metodu: Bu metot, yeni bir klasör hazırlamak amacıyla
kullanılır. Aşağıda örnek program_1 kodlarında nasıl kullanıldığı gösterilmektedir.
Directory. CreateDirectory("C:\\AOF");
Bu kod C:\ anadizininde Aof isimli bir klasör oluşturur.
Directory. CreateDirectory("AOF");
Bu kod programın çalıştığı klasörde Aof isimli bir klasör oluşturur.
Directory.CreateDirectory(@"..\AOF");
Bu kod programın çalıştığı klasörün bir üst klasöründe test isimli bir klasör oluşturur.
Directory.CreateDirectory(@"..\..\AOF");
Bu kod programın çalıştığı klasörün iki üst klasöründe Aof isimli bir klasör oluşturur. Örnek program_1:
Şekil 8.2. AOF isimli bir klasör oluşturulmasını sağlayan örnek program kodları
Adres tanımı yapılırken;
string ifadenin başında
@, işareti kullanılırsa,
adres bilgisindeki \
işareti tek olarak
kullanılır. Eğer @ işareti
kullanılmazsa adres
bilgisinde \\ işareti çift
olarak kullanılmalıdır.
Dosya ve Klasör işlemleri
Atatürk Üniversitesi Açıköğretim Fakültesi 4
Şekil 8.3. AOF isimli bir klasörün C sürücüsündeki görünümü
Şekil 8.2’de gösterilen örnek program_1‘de CreateDirectory metodunun
parametresi olarak verilen adres ve isimde şekil 8.3‘de gösterilen AOF klasörü
oluşturulmuştur.
Exists ( ) Metodu: Bu metot, verilen adreste klasörün olup olmadığını kontol
eder. Klasör varsa true, yoksa false değerleri döndürür.
bool b= Directory. Exists(@"c:\AOF");
Move ( ) Metodu: Bu metod, ilk olarak verilen adreste bulunan klasörü, ikinci
verilen adresteki konuma taşır.
Directory. Move (@ “c:\Aof”, @ “c:\ERZURUM\ATA”);
Yukarıda verilen kod, c:\ anadizininde yer alan Aof isimli klasörü, yine c,
anadizini içinde yer alan ERZURUM klsörünün içindeki ATA alt dizinin içerisine
taşımaktadır.
Delete ( ) Metodu: Bu metod, klasörleri silmek için kullanılır. İki tip kullanım
biçimi vardır. Aşağıda verilen örnek kodlarda nasıl kullanıldığı
gösterilmektedir.
Directory. Delete(@"c:\AOF");
Yukarıda verilen kod, C:\ anadizininde yer alan Aof isimli bir klasörün içinde bir
şey yoksa silme işlemi yapar. Klasörün içi doluysa silme işlemi için;
Directory. Delete(@"c:\AoF",bool a);
Bir klasör ya da dosya
oluşturmadan önce
mutlaka ilgili klasör ve
dosyanın diskte olup
olmadığının Exists()
metoduyla kontrolü
gereklidir. Yapılacak bu
işlem programın hata
üretmesinin önüne
geçecektir.
Dosya ve Klasör işlemleri
Atatürk Üniversitesi Açıköğretim Fakültesi 5
Yukarıda verilen kod, a değişkeninin içi true ise ilgili “c:\” adresindeki Aof klasörü
içindeki dosya ve klasörlerle beraber silinmesini sağlar.
GetCurrentDirectory ( ) Metodu: Bu metot, çalışan programın hangi klasörde
olduğunu gösterir.
string c= Directory. GetCurrentDirectory( );
Yukarıda verilen kod, c değişkeninin içi GetCurrentDirectory metoduyla okunan
adres bilgisi ile doldurulur.
SetCurrentDirectory ( ) Metodu: Bu metot, Program için geçerli olan klasörü
değiştirmek için kullanılır.
SetCurrentDirectory(@“D:\\”);
Yukarıda verilen kod, daha önce program için geçerli olan adresi C:\\ sürücüsünü
D:\\ sürücüsü olarak değiştirir.
GetDirectories ( ) Metodu: Bu metot, verilen adresteki bütün klasörleri bularak
isimlerini gösterir.
string [ ] d = Directory. GetDirectories(@"c:\AoF" );
Yukarıda verilen kod, string dizisinin içini GetDirectories metoduyla okunan
adresteki tüm klasörlerin isimleriyle doldurur.
GetDirectoryRoot ( ) Metodu: Bu metot, verilen yoldaki klasörün bulunduğu kök
dizin bilgisini ve volume bilgisini elde ederek isimlerini gösterir.
string e= Directory. GetDirectoryRoot (@"c:\AoF");
Adres olarak verilen ile d string dizisinin içine GetDirectoryRoot metoduyla okunan
adresten, kök dizin ve disk volume bilgisini elde ederek e string değişkenine aktarır.
GetCreationTime ( ) Metodu: Bu metot, verilen yoldaki klasörün hangi tarihte
oluşturulduğunu gösterir.
DateTime f=Directory. GetCreationTime(@"c:\AOF");
GetLastAccessTime ( ) ve GetLastWriteTime ( )Metodları: GetLastAcessTime
metodu, verilen yoldaki klasöre en son ne zaman erişildiğini ve GetLastWriteTime
metodu ise en son üzerinde ne zaman işlem yapıdığını gösterir.
DateTime g = Directory. GetLastAcessTime(@"c:\AOF");
DateTime h=Directory. GetLastWriteTime(@"c:\AOF");
Geliştirilen yazılımlarda;
program içerisindeki
yedekleme modülünde
dosya ve klasör üzerinde
işlem yaparken
GetCurrentDirectory(),
SetCurrentDirectory() ve
GetCreationTime()
metodları büyük kolaylık
sağlar.
Dosya ve Klasör işlemleri
Atatürk Üniversitesi Açıköğretim Fakültesi 6
Örnek program_2:
Şekil 8.4. Directory sınıfına ait metotların kullanımını gösteren örnek program
Şekil 8.5. Örnek program_2’nin ekran görüntüsü
Yukarıda Şekil 8.4’de Program_2 olarak verilen klasör işlemleri Directory
sınıfının metodları kullanılarak yapılmıştır. Yapılan bu klasör işlemlerinin aynısı
istenirse DirectoryInfo sınıflarının metodları kullanılarak yapılabilir. Bu sınıfın
metodlarını kullanabilmek için DirectoryInfo tipinde bir değişken hazırlamak
gereklidir.
Bu işlemin nasıl yapıldığı Şekil 8.6’da kodları gösterilen program_3 içerisinde
ayrıntılı olarak görülmektedir.
Dosya ve Klasör işlemleri
Atatürk Üniversitesi Açıköğretim Fakültesi 7
Örnek program_3
Şekil 8.6. DirectoryInfo sınıfına ait metodların kullanımını gösteren örnek program
Şekil 8.7. Örnek program_3’ün ekran görüntüsü
Yukarıda verilen şekil 8.5 ve Şekil 8.7 de ekran çıktıları karşılaştırıldığında her
iki sınıfında aynı işi yaptığı görülecektir. Fakat her iki sınıfın da kullanım biçimi
birbirinden farklıdır. DirectoryInfo sınıfında olan fakat Directory sınıfında olmayan
metodlardan bazıları aşağıda gösterilmiştir.
Create ( ) Metodu: Belirtilen adreste bir klasör oluşturur.
CreateSubdirectory ( ) Metodu: Belirtilen adreste bir alt klasör oluşturur.
Attributes ( ) Metodu: Belirtilen adresteki klasörün ( Gizli, Yalnız okunur, Arşiv)
özelliklerini görmek için kullanılır.
FullName ( ) Metodu: Belirtilen adresteki bir klasörün tam adını öğrenmek için
kullanılır.
Name ( ) Metodu: Belirtilen adresteki bir klasörün sadece adını öğrenmek için
kullanılır.
Dosya ve Klasör işlemleri
Atatürk Üniversitesi Açıköğretim Fakültesi 8
Extention ( ) Metodu: Belirtilen adresteki bir klasörün uzantısı varsa öğrenmek için
kullanılır.
MoveTo ( ) Metodu: Belirtilen adresteki bir klasörün içindeki bütün klasör ve
dosyalar ile belirtilen başka bir adrese taşınması için kullanılır.
Root ( ) Metodu: Belirtilen adresteki klasörün bulunduğu kök dizin bilgisini
gösterir.
Parent ( ) Metodu: Belirtilen adresteki klasörün dâhil olduğu üst klasöre geçmek
için kullanılır.
DirectoyInfo sınıfının bazı metodlarının kullanımı Program_3 içerisinde
gösterilmişti. Program_3 içerisinde yer almayan diğer metodların kullanımı
aşağıdaki program kodunda gösterilmiştir. Bu kodların çalışması için işaretli
kodların, program_3 de gösterildiği gibi Main metodu içerisine yazılması gerekir.
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ string adres = @"C:\aof1"; DirectoryInfo deneme = new DirectoryInfo(adres); deneme.Create(); DirectoryInfo alt = deneme. CreateSubdirectory("aof1"); Console. WriteLine("Özellikler: " + deneme. Attributes); Console. WriteLine("Uzantı: " + deneme. Extension); Console. WriteLine("Tam adres: " + deneme. FullName); Console. WriteLine("Klasör adı: " + deneme. Name); Console. WriteLine("Bir üst klasör: " + deneme. Parent); Console. WriteLine("Kök dizin: " + deneme. Root);
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
Dosya Sınıfları
Dosya işlemleri, System. IO isim alanındaki File ve FileInfo sınıflarıyla
yapılmaktadır. File sınıfındaki birçok metot Directory ve DirectoryInfo sınıfında da
vardır fakat tek farkları aynı görevleri dosyalar içinde yerine getirmeleridir.
Create ( ) Metodu: Parametre olarak verilen adres üzerinde istenen ad ve uzantıda
dosya oluşturur.
File.Create(@"c:\aof.txt");
Copy ( ) Metodu: Parametre olarak verilen adresler arasında dosya kopyalama
işlemi gerçekleştirir.
File.Copy(@"c:\aof.txt",@"d:\aof.txt");
Move ( ) Metodu: Parametre olarak verilen adresler arasında dosya taşıma işlemi
gerçekleştirir.
File.Move(@"c:\aof.txt",@"d:\aof.txt");
Dosya ve Klasör işlemleri
Atatürk Üniversitesi Açıköğretim Fakültesi 9
Delete ( ) Metodu: Parametre olarak verilen adresteki dosyayı silme işlemi
gerçekleştirir.
File.Delete(@"c:\aof.txt");
GetCreationTime ( ) Metodu: Parametre olarak verilen adresteki dosyayı ne
zaman oluşturulduğunu öğrenmek için kullanılır.
DateTime dosyaZaman =Directory. GetCreationTime("c:\\aof.
txt");
Yukarıdaki koda dikkat edilirse dosyanın ne zaman oluşturulduğunu
öğrenme işleminde Directory sınıfının GetCreationTime metodu kullanılmıştır.
Exists(), Delete(), GetCreationTime(), GetLastAccessTime(), GetLastWriteTime() gibi
metodlarda adres içeriği verilirken dosya ismi ve uzantısı da verildiğinde bu
metodlar dosyalar için de geçerli olmaktadır.
Directory ve DirectoryInfo arasındaki kullanım farkları File ve FileInfo
arasında da geçerlidir. Her iki sınıf arasındaki kullanım farkları Şekil 8.8 ‘de
gösterilen program_4’teki kodlar FileInfo sınıfı kullanılarak yazılmıştır.
Program_4‘ün çalıştırılması ile Şekil 8.9’da gösterilen ekran çıktısı elde edilir.
Örnek program_4
Şekil 8.8. File sınıfına ait metotların kullanımını gösteren örnek program
Dosya ve Klasör işlemleri
Atatürk Üniversitesi Açıköğretim Fakültesi 10
Şekil 8.9. Örnek program_4’ün ekran görüntüsü
Dosyalar üzerinde işlem yaparken parametre olarak verdiğimiz adres bilgisi
üzerinde de işlem yapan sınıflar mevcuttur. Bu sınıfların en önemlisi Path sınıfıdır.
Bu sınıfın en önemli metodu ise GetTempFileName() metodudur.
Bu metot sistemimizin temp klasöründe oluşturduğu bir dosyanın ismini
döndürür. Dosyalar üzerinde geçici işlemler yapılmak istendiğinde genelde bu
metot kullanılır. Bu sınıf hakkında daha geniş bilgi için bkz.Nesne Tabanlı
Programlama‐2
Dosya üzerinde okuma ve yazma işlemi yapabilen sınıflar
Dosyalar üzerinde okuma veya yazma işlemleri yapabilmek için, System. IO
isim alanında yer alan FileStream, StreamReader ve StreamWriter olmak üzere
genelde bu sınıflarından yararlanılır. Bir dosya üzerinde okuma ve yazma işlemi için
öncelikle onu açmak gereklidir. Dosyanın açılması sırasında FileStream sınıfı,
dosyayı okurken StreamReader ve dosyaya yazmak içinse StreamWriter sınıfları
kullanılır. Açılan her dosya üzerinde yapılan işlem bitirildiğinde mutlaka
kapatılmalıdır. Dosyayı kapatmak için Stream sınıfının parametresiz Close( )
fonksiyonu kullanılır.
FileStream Sınıfı: FileStream, disk üzerindeki dosyalarda veri alış‐verişi
yapmayı sağlayan bir kanal oluşturur. Bu veri kanalının kontrolü verilen
parametrelerle sağlanır. Bu sınıf ile aynı zamanda dosyalardan byte tabanlı veriler
okunabilir fakat StreamReader text tabanlı okuma yapabildiğinden bu sınıftan daha
kullanışlıdır.
Genel olarak kullanımı;
FileStream dosya= new FileStream (string A, FileMode. B,
FileAccess. C, FileShare. D);
Dosya ve Klasör işlemleri
Atatürk Üniversitesi Açıköğretim Fakültesi 11
FileStream dosya = new FileStream(@"AoF.txt", FileMode.OpenOrCreate,
FileAccess.Write, FileShare.None);
String A: ( @"c:\AoF.txt" ) parametresi ile dosyanın diskteki adresi, ismi ve uzantısı
birlikte verilir.
FileMode. B: ( FileMode. OpenOrCreate ) parametresi ise dosyanın ne amaçla
açılacağını belirtir. FileMode’a seçilecek değerle bu amaç belli edilir, buraya
gelebilecek değerler Tablo 8.1’ de verilmektedir.
Tablo 8.1. FileStream sınıfına ait Filemode seçenekleri
FileMode Seçenekleri
Açıklama
Create FileMode.Create seçeneği ile yeni bir dosya oluşturulur, aynı dosya varsa üzerine yazılır.
CreateNew Yeni bir dosya oluşturulur, eğer aynı dosya var ise IOException hatası alınır.
Append Dosya açılarak sonundan başlayarak yazma işlemi yapılır. Eğer dosya yok ise oluşturulur. FileMode.Append seçeneği sadece FileAccess.Write seçeneği ile kullanılır diğer kullanımlarda ArgumentException hatası alınır.
Open Dosya belirtilen dizinde var ise açılır. Eğer dosya yoksa FileNotFoundException hatası alınır.
OpenOrCreate Dosya belirtilen dizinde var ise açılır yok ise oluşturulur.
Truncate Dosya açılır ve içerisi boşaltılıp boyutu 0 byte olarak güncellenir.
FileAccess. C: (FileAccess. Write), parametre ise dosyaya hangi erişim
yetkisiyle açılacağını belirler. FileAccess’e seçilecek değerle bu amaç belli edilir,
buraya gelebilecek değerler Tablo 8.2’de verilmektedir.
Tablo 8.2. FileStream sınıfına ait FileAccess seçenekleri
FileAccess seçenekleri Açıklama
Read Dosyaya sadece okuma erişim yetkisi verir.
Write Dosyaya sadece yazma erişim yetkisi verir.
ReadWrite Dosyaya okuma/yazma erişim yetkisi verir.
FileShare. D: (FileShare. None ) parametresi, bu parametre ile kullanılan
kaynak dosyanın diğer strem’ler tarafından nasıl paylaşılacağını belirler. FileShare
’e seçilecek değerle bu amaç belli edilir, buraya gelebilecek değerler tablo 8.3’ de
verilmektedir.
Dosya ve Klasör işlemleri
Atatürk Üniversitesi Açıköğretim Fakültesi 12
Tablo 8.3. FileStream sinifina ait FileShare seçenekleri
FileShare seçenekleri
Açıklama
None İşlem yaptığınız stream dışındaki başka bir stream dosyaya okuma veya yazma için erişim sağlayamaz.
Read İşlem yaptığınız veya başka stream'ler dosyaya okuma için erişim sağlayabilirler.
Write İşlem yaptığınız veya başka stream'ler dosyaya yazma için erişim sağlayabilirler.
ReadWrite İşlem yaptığınız veya başka stream'ler dosyaya okuma ve yazma için erişim sağlayabilirler.
StreamReader sınıfı: StreamReader sınıfı ile dosyalardan text tabanlı veriler
okunabilir. Bir StreamReader nesnesi aşağıdaki yöntemlerle oluşturulabilir. Bu
sınıfın kullanımıyla ilgili kodlar Şekil 8.10‘da program_5 içerisinde gösterilmiştir.
Program_5 in çalıştırılması neticesinde Şekil 8.12’deki ekran elde edilir. Program_5’
deki kodların Şekil 8.12 deki gibi sonuç üretmesi için Aof.txt dosyası notepad.exe
programıyla oluşturulup içerisinde Şekil 8.11’deki text’in yazılması gerekmektedir.
FileStream sınıfının FileMode parametresine create seçeneği de yazılabilir. Bu
durumda dosya yeni oluşturulduğu için içerisi boş olarak gelecektir.
string adres = @"C:\Aof.txt"; FileStream deneme= new FileStream(adres, FileMode.Open); StreamReader okumaNesnesi1 = new StreamReader(deneme);
StreamReader sınıfının önemli metotları:
Close(): Açılan dosyadaki veri kanalını kapatır.
ReadLine( ) metodu: Dosyada içerisinde oluşturulan veri kanalından bir sonraki
metin satırını okur ve bunu string olarak döndürür. Eğer okunacak satır
bulunmazsa geriye null değeri döndürür.
Read ( ) metodu: Dosyada içerisinde oluşturulan veri kanalından dosyadan sadece
bir karekterlik veriyi okur ve int olarak tutar. Eğer okuma yapılamazsa ‐1 olarak
döndürür. Read(char[] dizi, int indeks, int adet) şeklinde kullanıldığında, adet
parametresi ile verilen sayı kadar karakteri, dizi [indeks] elemanından itibaren
diziye yerleştirir. Yerleştirilen karakter sayısını döndürür.
ReadToEnd( ) metodu: Dosya içerisinde oluşturulan veri kanalından dosyada
bulunan tüm veriyi okur ve string olarak tutar. Eğer okuma yapılamazsa boşluk
tutar.
Peek ( ) metodu: veri kanalından bir karakter okur fakat karakteri girdiden
çıkarmaz (Konum gösterici sanki okuma yapılmamış gibi ilgili karekterde bekler).
Eğer okunacak karakter mevcut değilse ‐1 döndürür.
Dosya ve Klasör işlemleri
Atatürk Üniversitesi Açıköğretim Fakültesi 13
Örnek program_5
Şekil 8.10. FileStream sınıfına ait metotların kullanımını gösteren örnek program
Şekil 8.11. C sürücüsündeki Aof. txt dosyasının içerisindeki metinin görüntüsü
Şekil 8.12. Örnek program_5’in ekran görüntüsü
StreamWriter sınıfı: StreamWriter sınıfı ile dosyalara text tabanlı veriler
yazılır. Bu durum Şekil 8.13 ve 8.14 ve 8.15’de program _6‘da gösterilmektedir.
Bir StreamWriter nesnesi aşağıda gösterildiği oluşturulabilir:
Dosya ve Klasör işlemleri
Atatürk Üniversitesi Açıköğretim Fakültesi 14
string adres = @"C:\Aof.txt"; FileStream deneme= new FileStream(adres, FileMode.Open); StreamWriter okumaNesnesi1 = new StreamWriter(deneme);
StreamReader sınıfında olduğu gibi StreamWriter sınıfında da Close( )
metoduyla StreamWriter nesnesine ilişkin kullanılan kaynaklar iade edilmelidir.
StreamWriter sınıfının önemli metotları:
Close(): Açılan dosyadaki veri kanalını kapatır.
Write ( ) metodu: Dosya içerisine, oluşturulan veri kanalından her türlü yazının
eklenmesini sağlar. Yazının sonuna herhangi bir sonlandırıcı karakter koymaz. Bu
sebeple yeni yazılan karekterler yan yana yerleşir.
WriteLine ( ) metodu: Write metoduyla aynı işi yapar. Fakat yeni eklenen yazıyı bir
satır aşağıdan başlayarak ekler.
Flush ( ) metodu: Tampondaki bilgilerin dosyaya yazdırılmasını sağlayarak
dosyanın güncellenmesini sağlar.
Örnek program_6
Şekil 8.13. StreamWriter sınıfına ait metotların kullanımını gösteren örnek program
Dosya ve Klasör işlemleri
Atatürk Üniversitesi Açıköğretim Fakültesi 15
Şekil 8.14. C sürücüsündeki Aof.txt dosyasının içerisindeki metnin ilk görüntüsü
Şekil 8.15. Örnek program_6’nin ekran görüntüsü
Şekil 8.16. C sürücüsündeki Aof.txt dosyasının içerisindeki metnin son görüntüsü
Dosya ve Klasör işlemleri
Atatürk Üniversitesi Açıköğretim Fakültesi 16
Özet
•Programlama dilleri içerisinde yer alan girdi veya çıktı işlemlerine I/O işlemleri denir ve bu terim İngilizce Input/Output'un kısaltılması sonucu elde edilir.
•Dosyaya bilgi kaydetmek, okumak,ekrana ya da yazıcıya bilgi yazdırmak gibi işlemler birer I/O işlemlerdir.
•Visual C# dilinde de I/O sistemi ile ilgili tüm sınıflar System.IO isim alanı altında yer alır. Bu yüzden program kodunun en başına using System.IO; kodunun yazılması gerekir.
•Klasör işlemleri, System. IO isim alanındaki Directory ve DirectoryInfo sınıflarıyla yapılmaktadır.
•Directory sınıfı statik yapıya sahiptir. Türetilmeden direkt sınıf isminin verilmesiyle kullanılabilir. Şu metotlara sahiptir; CreateDirectory (),Exists (), Move (), Delete (), GetCurrentDirectory (), SetCurrentDirectory (), GetDirectories () , GetDirectoryRoot (), GetCreationTime () , GetLastAccessTime (), GetLastWriteTime() .
•DirectoryInfo sınıfı dinamik yapıya sahiptir. Yeni bir sınıf nesnesinin türetilmesi sonrasında türetilen nesne kullanılabilir.Kullanımı şekli farklı olsa da directory sınıfının yanında ilave olarak şu metotlara da sahiptir; Create (), CreateSubdirectory (), Attributes (), FullName,Name (), Extention (), MoveTo (), Root (), Parent (), MoveTo ().
•Dosya işlemleri, System. IO isim alanındaki File ve FileInfo sınıflarıyla yapılmaktadır. File sınıfındaki birçok metot Directory ve DirectoryInfo sınıfında da vardır fakat tek farkları aynı görevleri dosyalar içinde yerine getirmeleridir.
•File sınıfı statik yapıya sahip olup FileInfo dinamik yapıya sahiptir.Klasör sınıfına ait metotların çoğu bu sınıf için de geçerlidir.
•Dosyalar üzerinde okuma veya yazma işlemleri yapabilmek için, System. IO isim alanında bir çok sınıf olmasına rağmen FileStream, StreamReader ve StreamWriter olmak üzere genelde bu sınıflarından yararlanılır.
•Bir dosya üzerinde okuma ve yazma işlemi için öncelikle onu açmak gereklidir. Dosyanın açılması sırasında FileStream sınıfı, dosyayı okurken StreamReader ve dosyaya yazmak içinse StreamWriter sınıfları kullanılır. Açılan her dosya üzerinde yapılan işlem bitirildiğinde mutlaka kapatılmalıdır. Dosyayı kapatmak için Stream sınıfının parametresiz Close( ) fonksiyonu kullanılır.
•StreamReader sınıfı ile dosyalardan text tabanlı veriler okunabilir. Şu metotlara sahiptir: Close(), ReadLine( ), Read ( ), ReadToEnd( ), Peek ( )
•StreamWriter sınıfı ile dosyalara text tabanlı veriler yazılır.Şu metadlara sahiptir: Close(), Write ( ), WriteLine ( ), Flush ( )
Dosya ve Klasör işlemleri
Atatürk Üniversitesi Açıköğretim Fakültesi 17
DEĞERLENDİRME SORULARI
1. C# dilinde, klasör ve dosya sınıfları hangi isim alanından türetilmiştir?
a) System.Array
b) System.Data
c) System.IO
d) System.Text
e) System.Drawing
2. Aşağıdakilerden hangisi DirectoryInfo sınıfından bir nesne üretmek amacıyla
kullanılabilen bir deyimdir?
a) break
b) new
c) create
d) type
e) throw
3. Bir disk üzerinde klasör oluşturmak için aşağıdaki metotlardan hangisi kullanılır?
a) GetCreationTime()
b) GetDirectories()
c) GetLastAccessTime()
d) Create()
e) SetCreationTime()
4. Bir disk üzerinde oluşturulmak istenen klasörün olup olmadığını kontrol eden
metot aşağıdakilerden hangisidir?
a) Delete()
b) Exists()
c) Move()
d) Copy()
e) Create()
5. Aşağıdaki sınıflardan hangisi dosya ve klasör işlemlerinde kullanılmaz?
a) Directory
b) File
c) StreamWriter
d) StreamReader
e) Path
Değerlendirme sorularını
sistemde ilgili ünite
başlığı altında yer alan
“bölüm sonu testi”
bölümünde etkileşimli
olarak cevaplayabilirsiniz.
Dosya ve Klasör işlemleri
Atatürk Üniversitesi Açıköğretim Fakültesi 18
6. Bir dosya üzerinde okuma ve yazma işlemi için öncelikle onu açmak gereklidir.
Dosyanın açılması sırasında genelde ………….. Sınıfı kullanılır.
Cümlede boş bırakılan yere aşağıdakilerden hangisi getirilmelidir?
a) FileStream
b) StreamReader
c) StreamWriter
d) DirectoryInfo
e) Path
7. Aşağıdakilerden hangisi SteamReader sınıfının bir metodu değildir?
a) ReadLine()
b) Peek()
c) ReadToEnd()
d) Read()
e) Flush()
8. Aşağıdakilerden hangisi FileStream sınıfında yer alan parametrelerden biri
değildir?
a) @”c:\test.txt”
b) FileMode.OpenOrCreate
c) FileAccess.Write
d) FileAccess.Read
e) FileMode.WriteLine
9. C# ‘ta dosya ve klasörlere bir adres bilgisi verilirken hangi veri türü tercih
edilmelidir?
a) int
b) byte
c) string
d) char
e) long
Dosya ve Klasör işlemleri
Atatürk Üniversitesi Açıköğretim Fakültesi 19
10. ‐‐‐‐ using System; using System.IO; class soru10 { static void Main() { String yol=@"c:\"; String[] bul = Directory. GetDirectories(yol); foreach (string bul2 in bul) { Console. WriteLine(bul2.ToString()); }}} ‐‐‐‐‐
Aşağıdakilerden hangisi kodları verilen programın çalışmasını doğru olarak
açıklar?
a) Sürücüsündeki bütün dosyaları ekrana tek satırda listeler.
b) Sürücüsündeki ismi c ile başlayan dosyaları ekranda alt alta listeler.
c) Sürücüsündeki ismi c ile başlayan klasörleri ekranda tek satırda listeler.
d) Sürücüsündeki bütün dizinleri ekranda alt alta listeler.
e) Sürücüsündeki bütün dosyaları ekranda alt alta listeler.
Cevap Anahtarı:
1.C,2.B,3.D,4.B,5.E,6.A,7.E,8.E,9.D,10.D
Dosya ve Klasör işlemleri
Atatürk Üniversitesi Açıköğretim Fakültesi 20
YARARLANILAN KAYNAKLAR VE BAŞVURULABİLECEK
DİĞER KAYNAKLAR
ALGAN, Sefer, (2010), Her Yönüyle C#, İstanbul: Pusula Yayıncılık, İstanbul.
AKTAŞ, Volkan, (2013), Her Yönüyle C# 5.0, KODLAB, İstanbul.
CLARK, Dan, (2013), Your visual blueprint for building.NET application, 2nd Edition,
Hungry Minds, New York.
SCHILDT, Herbert, (2002), The Complete Reference C#, çev. Duygu Arbatlı Yağcı, Alfa
Basım Yayım Dağıtım, İstanbul.
SHARP, John, (2002), Microsoft Visual C#.NET, çev. Mert Derman, Arkadaş Yayınevi,
Ankara.
YANIK, Memik, (2004), Microsoft Visual c#.NET, 1.Baskı, Seçkin Yayıncılık, Ankara.