You are on page 1of 24

Bölüm 5

C# ile Dosya İşlemleri


öğrenme çıktıları

Giriş/Çıkış (Input/Output) Fonksiyonları


2 Giriş-çıkış akımlarının kullanımını

1 2
Dosya İşlemleri kavrayabilme
1 Dosya oluşturma, okuma ve dosyaya 3 Metin ve tarih biçimlendirmesini
yazma işlemlerini kavrayabilme kavrayabilme

3
Konsol (Console) İşlemleri
4 Konsol penceresinin kullanımını
kavrayabilme

Anahtar Sözcükler: • Dosya İşlemi • Dosya Yazma • Dizin • Tarih Biçimi • Metin Biçimi • Konsol

112
5
İleri Programlama I

GİRİŞ
Programların çalışması sırasında gerekli ayarların tutulduğu yerler dosyalardır. Genellikle “.ini” uzantı-
sına sahip olurlar. Kullanıcıya düzenleme izni vererek daha esnek bir yapı oluştururlar. Dosyaların kullanı-
mı, sadece gördüğümüz alanlarla sınırlı değildir. Örnek olarak veri tabanı uygulamalarını verebiliriz. Veri
tabanları, dosya işlemlerinin yavaşlığı ve boyut problemleri nedeniyle ortaya çıkmış uygulamalardır fakat
arka planına baktığımızda içerisinde dosya işlemleri yapılmaktadır. Tabii bu dosya işlemleri için çeşitli
optimizasyon ve sıralama algoritmaları kullanılmaktadır.
İşletim sistemlerinin yapısı gereği verilerimizi bir yerlerde muhafaza etmemiz gerekmektedir. Günlük
hayatta da veri transferi için çeşitli dosya formatları kullanmaktayız. Programlama dillerinde bu farklı
dosya türleri için geliştirilmiş onlarca kütüphane de bu dosyaların içeriklerine erişerek işlem yapmamıza
imkân sağlamaktadır.
Program yazmanın eğlenceli yollarından biri de dosya işlemleridir. Kendi dosya formatınızı oluştura-
bilir, yaptığınız işlemlere biraz da şifreleme ekleyerek, içeriklerini sadece kendi programınızın anlayacağı
şekilde dizayn edebilirsiniz. Şifre işlemleri için kaydırmalı, yerine koymalı ve yer değiştirmeli gibi eski
yöntemleri öğrenerek uygulayabilirsiniz.

DOSYA İŞLEMLERİ
C# programlama dilinde System.IO kütüphanesi, dosya işlemleri ile ilgili çeşitli sınıfları içermektedir.
I/O (Input/Output) yani giriş/çıkış işlemlerinin yanında bilgisayarın çeşitli kaynaklarına erişim için kul-
lanılan yolları simgeler.
.Net ortamında soket ve bellek işlemleri de benzer bir biçimde çalışabilmesi için dosya gibi davranmak-
tadır. Ekrana bilgi yazdırma, yazıcıdan çıktı alma, klavyeden bilgi girişi, dosya kaydetme, farenin yaptığı
işlemlerin hepsi birer I/O işlemidir. I/O sistemleri, Stream sınıfı üzerine kuruludur. Bu sistemler, bir girdi
ya da çıktı sistemi üzerinden byte düzeyinde veriyi okuyan sanal birimlerdir. FileStream, MemoryStream,
NetworkStream gibi sınıflar, Stream abstract sınıfından türetilerek fonksiyonları tanımlanmıştır.
FileStream sınıfı, dosyadan veri okurken, veri yazarken ve yeni bir dosya oluştururken kullanılan bir sı-
nıftır. Bu sınıf ile işlem yapabilmek için ilk önce bu sınıftan bir nesne türetmemiz gerekmektedir. Yeni nesne
oluşturulurken zorunlu olarak verilmesi gereken parametreler vardır. Yeni nesne şu şekilde oluşturulmaktadır:

FileStream fs = new FileStream( dosya_yolu, dosyanın_açılma_şekli, dosyanın_


kullanım_şekli );

Sırayla parametreleri inceleyelim. Dosya yolu (File Path) parametresi string veri içerir, bilgisayarımızın
istediğimiz bir klasöründe işlem yapabilmemize imkân sağlar. Bu parametreye doğrudan “yeni_dosya.txt”
gibi bir dosya adı da verebiliriz. Bu durumda projemizin bulunduğu klasörün altında, verdiğimiz isimdeki
dosya ile işlem yapacağız demektir.
Dosyanın açılma şeklinde (FileMode) ise 6 farklı dosya açılma şekli görmekteyiz.
• Append: Dosya yoksa oluşturur, varsa dosyanın sonuna ekleme yapmak için kullanılır.
• Create: Dosya yoksa yeni dosya oluşturur, aynı isimde başka bir dosya varsa üzerine yazar.
• CreateNew: Aynı isimde bir dosya varsa hata verir, yoksa yeni bir dosya oluşturur.
• Open: Belirtilen dosya yolundaki dosyayı açmak için kullanılır. Dosya yoksa hata verir.
• OpenOrCreate: Belirtilen dosya yolundaki dosyayı açmak için kullanılır, dosya yoksa yeni dosya
oluşturur.
• Truncate: Belirtilen dosya yolundaki dosyanın içeriğini silerek açmak için kullanılır.
Dosyanın kullanım şeklinde (enum türünde oluşturulmuş FileAccess) ise dosyaya hangi türde erişebi-
leceğimiz belirtilir. Üç farklı şekilde dosyaya erişebiliriz.

113
5
C# ile Dosya İşlemleri

• Read: Dosyayı sadece okuma yapmak için açar.


• Write: Dosyayı sadece yazmak için açar.
• ReadWrite: Dosyayı hem okumak hem de yazmak için açar.

Dosya Oluşturma
FileStream sınıfını kullanarak, “c:\tmp” klasörü altına “yeni_dosya.txt” dosyasını yoksa oluşturmak
(FileMode.OpenOrCreate) varsa (FileAccess.Write) yazmak için açalım.

FileStream fs = new FileStream("c:\\tmp\\yeni_dosya.txt", FileMode.OpenOrCreate,


FileAccess.Write);

Dosyaya Veri Yazma


System.IO kütüphanesinin bir sınıfı olan StreamWriter sınıfı ile işlemlerimize devam edeceğiz. Bu
sınıf, parametre olarak FileStream nesnesi almaktadır. StreamWrite, açılan dosyaya veri koymak için kul-
lanılır. Şu şekilde tanımlıyoruz:

StreamWriter sw = new StreamWriter(fs);

Şunu unutmamalıyız; StreamWriter kullandıktan sonra, her zaman için Close() metodu ile kapatma-
mız gerekmektedir. Aksi hâlde dosyaya yazma işlemi gerçekleşmeyecektir. Bu metot aynı zamanda FileSt-
ream (fs) nesnesini de kapatacaktır. Dosyaya veri yazdırma kodumuzu şu şekilde hazırlayabiliriz:

StreamWriter sw = new StreamWriter(fs);


sw.Write("Bu benim ");
sw.WriteLine("ilk dosya işlemim. ");
sw.WriteLine("Merhaba dünya!!!");
sw.Close();

Yeni bir dosya oluşturmak için kullandığımız “fs” nesnesi ile dosyaya veri ekleyebilmek için StreamWriter
nesnesi tanımladık. Sonra da oluşturulan dosyamıza 2 satırlık veri ekledik. WriteLine metodu, veriyi bir satıra
ekler ve bir alt satıra iner, yeni verilerin kayıtları bu satırdan devam eder. Kodun çalışan şekli ise şu şekildedir:

using System.IO;

namespace DosyaIslemleri
{
class Program
{
static void Main(string[] args)
{
FileStream fs = new FileStream("c:\\tmp\\yeni_dosya.txt", FileMode.
OpenOrCreate, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
sw.Write("Bu benim ");
sw.WriteLine("ilk dosya işlemim. ");
sw.WriteLine("Merhaba dünya!!!");
sw.Close();
}
}
}

114
5
İleri Programlama I

Dosyadan Veri Okuma


Mevcut dosyadan okuma yapmak için de StreamReader sınıfını kullanıyoruz. Dosyaya yazdırma örne-
ğimizdeki dosyayı okumak için hazırlanan kodumuzu inceleyelim.

using System;
using System.IO;

namespace DosyaIslemleri
{
class Program
{
static void Main(string[] args)
{
string dosya = "C:\\tmp\\yeni_dosya.txt";

StreamReader sr = new StreamReader( dosya );


string ilkSatir = sr.ReadLine();
string kalanSatirlar = sr.ReadToEnd();

Console.WriteLine( ilkSatir );
Console.WriteLine( kalanSatirlar );
sr.Close();
}
}
}

İlk önce StreamReader (sr) nesnemizi okumak istediğimiz dosyanın yolunu parametre olarak vererek
oluşturuyoruz. Açtığımız dosyadan okuma yapabilmek için, satır satır okuyan ReadLine() metodunu kul-
lanabiliriz. Tüm dosyayı bu metot ile okuyabilmek için bir while döngüsü içinde, ReadLine() metodu
dosya sonuna gelip “null” değerini verene kadar okumaya devam edecek kodumuzu hazırlayabiliriz. Diğer
okuma yöntemi olan ReadToEnd() metodu ile de dosya içindeki tüm veriyi bir kerede alabiliriz. Satır son-
larını gösteren “\r\n” karakterlerini de bu veri içinde görebiliriz.
Örnek kodumuzda ilk önce bir satır okuduk ve bunu string değişkene atadık, sonra da kalan tüm satır-
ları okuyarak başka bir string değişkene atadık. Dikkat etmemiz gereken nokta, ilk satır okunduktan sonra
okuma imleci alt satıra indiği için, kalan satır verileri de bu noktadan yani ikinci satırdan dosya sonuna
kadar alınacaktır. Programın çıktısı da şu şekilde olacaktır:

Bu benim ilk dosya işlemim.


Merhaba dünya!!!

BinaryWriter ve BinaryReader
BinaryWriter ve BinaryReader sınıflarının yaptığı iş ile StreamWriter ve StreamReader sınıflarının
yaptıkları işler aynıdır. Aralarındaki en önemli fark, BinaryWriter ve BinaryReader sınıfları ile string
olma zorunluluğu olmadan her türlü veriyi yazdırıp okuyabiliriz. Bu sınıflarda Write(int), Write(char[]),
Write(byte) ile ReadByte(), ReadChar() ve ReadString() gibi metotlar bulunmaktadır. BinaryWriter sını-
fıyla oluşturulan dosyalar açıldığında okunamayan karakterler ile karşılaşılır. Bunun sebebi de BinaryWri-
ter metodunun dosyaya text yöntemi yerine binary yöntemle kayıt yapmasıdır.

115
5
C# ile Dosya İşlemleri

using System;
using System.IO;

namespace DosyaIslemleri
{
class Program
{
static void Main(string[] args)
{
int tamsayi = 7;
decimal virgullusayi = 26.56M;
char karakter = 'K';
string dosya = "binary_dosya.txt";

FileStream fs1 = new FileStream(dosya, FileMode.OpenOrCreate);


BinaryWriter bw = new BinaryWriter(fs1);
bw.Write(tamsayi);
bw.Write(virgullusayi);
bw.Write(karakter);
bw.Close();

FileStream fs2 = new FileStream(dosya, FileMode.Open);


BinaryReader br = new BinaryReader(fs2);
Console.WriteLine(br.ReadInt32());
Console.WriteLine(br.ReadDecimal());
Console.WriteLine(br.ReadChar());
br.Close();
}
}
}

Örnek kodumuzda sırayla bir tam sayı, virgüllü bir sayı ve bir karakter değişkeni tanımlandı. Text for-
matında txt uzantılı bir dosya oluşturuldu. Dosyaya BinaryWriter kullanılarak binary olarak değişkenlerin
içerikleri eklendi. Sonrasında BinaryReader sınıfı yardımıyla dosyaya eklediğimiz binary değerler ekrana
yazdırıldı.

Directory ve File Sınıfları


Directory ve File sınıfları System.IO altında bulunur. Bu iki sınıfta da statik metotlar vardır ve birçok
metotları benzerdir. Aralarındaki en büyük fark, Directory sınıfı klasörler üzerinde işlem yaparken File
sınıfı da dosya işlemleri yapmaktadır. Bu sınıflara ait bazı metotları örnekler ile inceleyelim.

116
5
İleri Programlama I

using System;
using System.IO;

namespace DosyaIslemleri
{
class Program
{
static void Main(string[] args)
{
string file = "C:\\tmp2\\yeni_dosya.txt";
string directory = "C:\\tmp";
string directory2 = "C:\\tmp2";
string directory3 = "C:\\tmp3";

Directory.CreateDirectory(directory);
// Klasör oluşturur
Directory.Move( directory, directory2 );
// Klasörü ve içindekileri taşır, ismini değiştirir
Directory.Delete( directory );
// İçi boşalan boş klasörü siler
bool klasorVarmi = Directory.Exists( directory );
// Klasör var mı diye kontrol eder
string[] klasorler = Directory.GetDirectories( directory2 );
// Klasörün içindeki klasörleri getirir
string[] dosyalar = Directory.GetFiles( directory3 );
// Klasörün içindeki dosyaları getirir

Console.Write("Klasör var mı? ");


Console.WriteLine( klasorVarmi ? "Var" : "Yok" );

Console.WriteLine("Dosyalar: ");
for(int i=0;i<dosyalar.Length; i++)
Console.WriteLine( dosyalar[i]);

File.Create( file ); //Dosya oluşturur


File.Move("C:\\tmp2\\File.txt", "C:\\tmp3\\File2.txt");
// Dosyayı taşır, ismini değiştirir
File.Delete( file );
//Dosyayı siler
bool dosyaVarmi = File.Exists(file);
// Dosya var mı diye kontrol eder
}
}
}

• Directory.CreateDirectory( dosyaYolu ): Parametre olarak verilen klasörü oluşturur.


• Directory.Move( kaynakKlasör, hedefKlasör ): Kaynak klasörü içeriği ile birlikte hedef klasöre taşır.
• Directory.Delete( klasör ): Parametre olarak verilen klasörü siler.
• bool sonuc = Directory.Exists( klasör ): Klasör oluşturma veya silme işlemlerinde kullanılır. Para-
metre olarak verilen klasörün olup olmadığını kontrol eder. Sonuca göre true/false değer döndüren
bir metottur.
• string[] klasorler = Directory.GetDirectories( klasör ): Parametre olarak verilen klasörün alt klasör-
lerini veren metottur. Sonucu string dizisi olarak döndürür.

117
5
C# ile Dosya İşlemleri

• string[] dosyalar = Directory.GetFiles( klasör ): Parametre olarak verilen klasörün içindeki dosyaları
veren metottur. Sonucu string dizisi olarak döndürür.
• File.Create( dosyaYolu ): Parametre olarak verilen dosya yolu ve dosya ismine göre dosya oluşturur.
• Directory.Move( kaynakDosya, hedefDosya ): Kaynak dosyayı bulunduğu konumdan hedef olarak
verilen konum ve isme göre taşıyan metottur.
• File.Delete( dosyaYolu ): Parametre olarak verilen dosyayı siler.
• bool sonuc = File.Exists( dosyaYolu ): Dosya oluşturma veya silme işlemlerinde kullanılır. Paramet-
re olarak verilen dosyanın olup olmadığını kontrol eder. Sonuca göre true/false değer döndüren bir
metottur.

DirectoryInfo ve FileInfo Sınıfları


DirectoryInfo ve FileInfo sınıflarının metotları static değildir, bu sınıflardan oluşturulan nesneler üze-
rinden erişilebilirler. Directory ve File sınıfları sadece klasör ve dosyalar üzerinde yaptıkları işlemler için
dosya yolunu kullanırken, DirectoryInfo ve FileInfo sınıfları ise dosya yolunun yanında dosya adı, boyutu,
uzantısı, oluşturulma tarihi gibi bilgileri de vermektedir. Bir örnek ile inceleyelim.

using System;
using System.IO;

namespace DosyaIslemleri
{
class Program
{
static void Main (string[] args)
{
FileInfo DosyaBilgi = new FileInfo("C:\\tmp\\yeni_dosya.txt");
DirectoryInfo KlasorBilgi = DosyaBilgi.Directory;
// Dosyanın bulunduğu klasör
FileInfo[] KlasorBilgiListe = KlasorBilgi.GetFiles();
// dosyanın bulunduğu klasördeki dosyaların listesi

Console.WriteLine("Dosya Adi : " + DosyaBilgi.Name);


Console.WriteLine("Klasor Adi : " + DosyaBilgi.DirectoryName);
Console.WriteLine("Tam Yol Bilgisi : " + DosyaBilgi.FullName);
Console.WriteLine("Dosya Uzantisi : " + DosyaBilgi.Extension);
Console.WriteLine("Byte Uzunluk : " + DosyaBilgi.Length.ToString());
Console.WriteLine("Dosya Olusturma Zamani : " +
DosyaBilgi.CreationTime.ToString("dd.MM.yyyy hh:ss"));
Console.WriteLine("");

Console.WriteLine( DosyaBilgi.Directory + " Klasörü altındaki dosyalar");


Console.WriteLine( "-----------------------------------------");
foreach (var item in KlasorBilgiListe)
{
Console.WriteLine("Dosya konumu => " +
DosyaBilgi.DirectoryName + "\\" + item.Name);
}
}
}
}

118
5
İleri Programlama I

Örnek programı inceleyecek olursak;


DirectoryInfo nesnesinin GetFiles() metodu ile ilgili dosyanın bulunduğu klasördeki dosyaların listesi
alınmaktadır. Name metodu ile dosyanın ismine erişim sağlanmaktadır. DirectoryName ile dosyanın bu-
lunduğu klasörün yolu elde edilmektedir. FullName ile dosyanın adı ve bulunduğu klasör bilgisine ulaşıl-
maktadır. Dosya uzantısı Extension metodu ile alınmaktadır. Dosyanın byte olarak uzunluğunu Length
metodu vermektedir. Örneğimizdeki son metot olan CreationTime metodu da bize dosyanın oluşturulma
zamanını vermektedir.
Dosya kopyalama ile ilgili bir örnek yapalım. Bu örneğimizde, kaynak klasör altındaki dosyaların bir
listesini alıyoruz. Sonra bu listede dosya uzantısı “.xslx” olan excel dosyalarını arıyoruz. Bulunan dosyalar
da hedef olarak tanımlanan klasöre kopyalanıyor.

using System;
using System.IO;

namespace DosyaIslemleri
{
class Program
{
static void Main(string[] args)
{
string kaynak = @"C:\tmp\";
string hedef = @"C:\tmp2\";
var dosyalar = new DirectoryInfo(kaynak).GetFiles("*.*");

foreach (FileInfo dosya in dosyalar)


{
if( dosya.Name.Contains( ".xlsx" ) )
dosya.CopyTo(hedef + dosya.Name);
}
Console.WriteLine("Dosya kopyalama başarı ile tamamlandı");
}
}
}

Günlük Dosya Yedekleme


Yedeğini almak istediğimiz bir klasörümüz varsa, hazırlayacağımız çok kısa bir kod ile istediğimiz zaman
dosyaların son hâllerini yedekleyebiliriz. Kodumuzda, yedekleme klasörümüz içerisinde günün tarihi ile yeni
bir klasör açılarak kaynak klasördeki tüm dosyalar bu klasöre yedeklenmektedir. Hedef klasör yok ise oluştu-
rulmakta, daha önceden kopyalanan dosyalar da tekrar kopyalanmaması için kontrol edilmektedir.

119
5
C# ile Dosya İşlemleri

using System;
using System.IO;

namespace Sistem
{
class Program1
{
static void Main(string[] args)
{
DateTime bugun = DateTime.Now;
string tarih = bugun.ToShortDateString();
string kaynakKlasor = @"D:\kaynak\";
string hedefKlasor = @"D:\hedef\" + tarih + "\\";
if (!Directory.Exists(hedefKlasor))
Directory.CreateDirectory(hedefKlasor);
var dosyalar = new DirectoryInfo(kaynakKlasor).GetFiles("*.*");
foreach (FileInfo dosya in dosyalar)
{
if( !File.Exists(hedefKlasor + dosya.Name))
dosya.CopyTo(hedefKlasor + dosya.Name);
}
Console.WriteLine("Dosya yedekleme başarı ile tamamlandı...");
Console.ReadKey();
}
}
}

Öğrenme Çıktısı
1 Dosya oluşturma, okuma ve dosyaya yazma işlemlerini kavrayabilme

Araştır 1 İlişkilendir Anlat/Paylaş

Uzantısı xlsx olan bir excel Çok kullandığınız dosya iş-


Dosya ve klasör arasındaki
dosyası ile işlem yapmak is- lemlerini kod yazarak nasıl
farkı anlatın.
tersek ne yapmalıyız araştırın. çözebilirsiniz açıklayın.

GİRİŞ/ÇIKIŞ (INPUT/OUTPUT) FONKSİYONLARI


C# programlama dilinde I/O fonksiyonları System.Console sınıfına tanımlanmıştır. Console sınıfı,
System.IO altında tanımlanmayan ama ekrana yazı yazdıran ve kullanıcı girdilerini alan I/O işlemleri
yapan bir sınıftır. Console için tanımlanmış üç adet akım (stream) mevcuttur. Bunlar; TextWriter türünde
tanımlanmış Console.Out, Console.Error ve TextReader türünde tanımlanmış Console.In’dir.

120
5
İleri Programlama I

Konsol ekranına yazı yazdırabilmek için Console sınıfının Write() ve WriteLine() metotları kullanıl-
maktadır. Bu metotlar arasındaki tek fark, WriteLine’da yazının sonuna “\n” koyarak, sonraki yazının yeni
bir satırda başlamasını sağlarken, Write metodu ise yeni satıra geçmeden aynı yerden yazdırmaya devam
eder. Ayrıca bu metotlarla verileri biçimlendirerek de yazdırabiliriz.

Console.WriteLine("formatlı yazı", ifadeler);


Console.WriteLine($"formatlı yazı {ifadeler}");
Console.WriteLine("yazı" + ifadeler );

Buradaki şablon gösterimdeki formatlı yazı, yazdırılmak istenen metni, ifadeler ise işlemler, değişkenler
ve değerler gibi verileri ifade etmektedir.

using System;
using System.IO;

namespace DosyaIslemleri
{
class Program
{
static void Main(string[] args)
{
double feet = 7;
double santimetre = feet * 30.48;
Console.WriteLine("{0} feet {1} santimetre eder", feet, santimetre);
Console.WriteLine($"{feet} feet {santimetre} santimetre eder");
Console.WriteLine(feet + " feet " + santimetre + " santimetre eder");
}
}
}

Örnek koddaki üç satırın çıktıları da aynıdır:

7 feet 213,36 santimetre eder


7 feet 213,36 santimetre eder
7 feet 213,36 santimetre eder

Console.WriteLine("{0} feet {1} santimetre eder", feet, santimetre);

Bu metotta kullanılan {0} ve {1}, sırasıyla metinden sonra gelen değişkenlere işaret etmektedir. Yani {0}
görülen yere ilk değişken olan feet değişkeni, {1} yerine de santimetre değişkeni konulmaktadır.

Console.WriteLine($"{feet} feet {santimetre} santimetre eder");

Bu satırda ise metnin başına “$” işareti eklenerek, metin içinde { } arasındakileri değişken olarak algı-
layıp değerlerini yazdırmaktadır.

Console.WriteLine(feet + " feet " + santimetre + " santimetre eder");

121
5
C# ile Dosya İşlemleri

Son formatlı satırımızda ise metin ve değişkenler de sanki string bir değer gibi aralarına “+” işareti ko-
nularak string toplama işlemi yapılmıştır.
Konsoldan bilgi almak için Read() ve ReadLine() metotları kullanılmaktadır.
• Read metodu kullanıcıdan veri girişi bekler, verileri birer karakter hâlinde alarak sonucu da int
olarak alır.
• ReadLine metodunda ise enter tuşuna basana kadar girilen tüm veriyi depolar, sonra string forma-
tında aktarır.
• int Peek(): Input stream’den yani girdiden, tampondan silmeden, bir karakter okunması işlemini
gerçekleştirir. Örnek ile inceleyelim.

Console.Write((char)Console.In.Peek() + " " + (char)Console.In.Peek());

Örnek kod için kullanıcının ekrana “Merhaba” yazdığını düşünelim. Kodumuz ekrana M M yazacaktır.
Çünkü tampondan silinmeden hep aynı karakteri okumaktadır.
• int ReadBlock(char[] dizi, int indeks, int adet): Bu metot yardımıyla, Input stream yani girdi, dizi
değişkeninin indeks elemanından başlayarak adet sayısı kadar dizi değişkenine aktarılır.
• string ReadToEnd(): Input stream yani girdideki tüm verileri okuyarak tamponu temizler. Okunan
verileri de string türünde döndürür.

Input Stream
C#’da, bütün I/O işlemleri (stream) akımlar üzerine kurulmuştur. Akımlar arasında yönlendirme yap-
mak mümkündür. Komut satırından şu şekilde programları çalıştırdığımızda;
• program > cikti.txt
Çalıştırılan programın ekran çıktıları, cikti.txt adlı dosyaya yazdırılacağı anlamına gelmektedir.
Dolayısıyla, standart konsol çıktısı dosya akımına yönlendirilmiş olur. Yönlendirmeye başka bir
örnek verelim;
• program < veriler.txt
Çalıştırılan programdaki Console.Read() veya Console.ReadLine() yerine veriler.txt dosyasındaki
veriler kullanılacaktır. C# programları içinde de akımlar şu şekilde yönlendirilebilir;
- static void SetIn( StreamReader sr ) veya static void SetIn( TextReader sr )
- static void SetOut( StreamWriter sw ) veya static void SetOut( TextWriter tw )
- static void SetError( StreamWriter sw ) veya static void SetError( TextWriter tw )
Akımın yönlendirilmesine örnek vererek inceleyelim.

using System;
using System.IO;

namespace DosyaIslemleri
{
class Program
{
static void Main()
{
FileStream fs = new FileStream("veriler.txt", FileMode.Open);
Console.SetIn(new StreamReader(fs));
Console.WriteLine(Console.ReadLine());
Console.WriteLine(Console.ReadLine());
}
}
}
122
5
İleri Programlama I

Console sınıfında giriş akımı için fs değişkeni ile belirtilen FileStream tanımlanmıştır. Yani kullanıcı-
dan girdi almak yerine ReadLine metodu ile dosyadan okumaktadır.

using System;
using System.IO;

namespace DosyaIslemleri
{
class Program
{
static void Main()
{
Console.WriteLine("Bu denemede, metni ilk önce ekrana yazdıracağız");
FileStream fs = new FileStream("deneme.txt", FileMode.Create);
TextWriter tw = Console.Out;
StreamWriter sw = new StreamWriter( fs );
Console.SetOut(sw); // çıkış akımı dosyaya çevrildi
Console.WriteLine("Bu metin dosyaya yazılıyor"); //dosyaya
Console.SetOut(tw); // çıkış akımı console a çevrildi
Console.WriteLine("Bu metin ekrana yazılıyor"); //ekrana
sw.Close();
}
}
}

Programda, ilk önce ekrana “Bu denemede, metni ilk önce ekrana yazdıracağız” yazdırılıyor. Sonra çıkış
hedefi konsol olan TextWriter nesnesi tanımlanıyor. Daha sonra çıkışı dosya olan StreamWriter tanımla-
narak çıkış akımı dosyaya çevriliyor ve dosyaya yazdırılıyor. Sonrasında ise çıkış akımı tekrar yön değiştirip
konsola çevrilerek ekrana yazı yazdırılıyor. En son olarak da sw akımının kaynakları boşaltılıyor.

Biçimlendirme Kuralları
Console sınıfı metotlarından Write()/WriteLine() ile formatlı şekilde metin, sayı ve tarih gibi içerikler
yazdırılabilir. Biçimlendirmede kullanılan şablonları örneklerle inceleyelim.

Sayı Biçimlendirme
{ argumentSırası[, hizalama][:biçim] }
{ argument[, hizalama][:biçim] }

Şablonun kullanıldığı örneğimiz:

int sayi = 56;


string metin = "C#" ;
Console.Write("sayı={0, 8:F2}", sayi );
Console.Write("sayı={0,-8:F0}", sayi );
Console.Write("metin={0,10}", metin );

Veya aynı çıktıyı veren diğer kullanımı

123
5
C# ile Dosya İşlemleri

Console.Write($"sayı={ sayi, 8:F2}");


Console.Write($"sayı={ sayi,-8:F0}");
Console.Write($"sayı={ metin, 10}");

İlk örneğimizdeki {0, 8:F2} biçimini inceleyelim. 0, parametre sırasını göstermektedir. Buradaki karşı-
lığı, int türünde tanımlanmış “sayi” değişkenidir. 8 rakamı da hizalamak için kullanılacak basamak sayısını
göstermektedir. Yani ekrana basılacak ifadenin uzunluğu 8 karakter olacaktır. Pozitif değerler için rakamlar
sağa yaslı olacaktır ve basamak sayısını tamamlamak için eksik kalan yerlere boşluk bırakılacaktır. Negatif
değerlerde ise rakamlar sola yaslanacak ve boşluklar bu sefer sağda bırakılacaktır. “:F2” ise noktalı bir gös-
terim yapılacağı ve noktadan sonra 2 basamak gösterileceğini ifade etmektedir. Kodun çıktısı ise şu şekilde
olacaktır:

sayı=-- -- -- 56,00


sayı=56 -- -- -- -- -- --
metin=-- -- -- -- -- -- -- -- C#

• -- işaretini boşluk olarak kabul edelim. Çıktımızın karakter uzunluğu 8 olması için kalan yerlere
boşluk bıraktık.

Tablo 5.1’de sayı biçimlendirme türlerinin örnekler ile gösterilmiş şekilleri mevcuttur.

Tablo 5.1 Biçimlendirilmiş sayı yazılışları


Karakter Açıklama Örnek Çıktı
Console.Write("{0:F2}", 46); 46,00
F veya f Virgüllü
Console.Write("{0:F0}", 46); 46
Console.Write("{0:C}", 4.6); 4,60 TL
C veya c Para birimi
Console.Write("{0:C}", -4.6); -4,60 TL
D veya d Haneli Console.Write("{0:D5}", 46); 00046
E veya e Bilimsel Console.Write(“{0:E}”, 460000); 4.600000E+005
G veya g Genel Console.Write("{0:G}", 4.6); 4,6
N veya n Binlik Ayraçlı Console.Write("{0:N}", 4600000); 4.600.000,00
P veya p Yüzdeli gösterim Console.Write("{0:P}", 0.46); %46

Hexadecimal
Console.Write("{0:X}", 460); 1CC
X veya x (Onaltılık sayı
Console.Write("{0:X}", 0xffff ); FFFF
sistemi)

Tarih Biçimlendirme
C#’da tarih bilgisini tabloda detayları verildiği gibi formatlayabiliriz. Kod içerisinde kullanımı da Tablo
5.2’de görülmektedir.

124
5
İleri Programlama I

Tablo 5.2 Biçimlendirilmiş tarih yazılışları


Görüntüleme
İşaret Tip DateTime t = DateTime.Now;
(30.07.2021 17:33:26)
d Kısa Tarih 30.07.2021 Console.WriteLine("{0:d}", t);
D Uzun Tarih 30 Temmuz 2021 Cuma Console.WriteLine("{0:D}", t);
t Kısa Saat 17:33 Console.WriteLine("{0:t}", t);
T Uzun Saat 17:33:26 Console.WriteLine("{0:T}", t);
f Full tarih ve saat 30 Temmuz 2021 Cuma 17:33 Console.WriteLine("{0:f }", t);
F Full tarih ve saat (uzun) 30 Temmuz 2021 Cuma 17:33:26 Console.WriteLine("{0:F}", t);
g Varsayılan tarih saat 30.07.2021 17:33 Console.WriteLine("{0:g}", t);
G Varsayılan tarih saat (uzun) 30.07.2021 17:33:26 Console.WriteLine("{0:G}", t);
M Gün / Ay 30 Temmuz Console.WriteLine("{0:M}", t);
r RFC1123 date string Fri, 30 Jul 2021 17:33:26 GMT Console.WriteLine("{0:r}", t);
s Sıralanabilir tarih Saat 2021-07-30T17:33:26 Console.WriteLine("{0:s}", t);
u Evrensel tarih saat 2021-07-30 17:33:26Z Console.WriteLine("{0:u}", t);
Y Ay / Yıl Temmuz 2021 Console.WriteLine("{0:Y}", t);

Özel Tarih Biçimlendirme


Tarih biçimlendirmede Tablo 5.2’ye ilaveten özel formatlar mevcuttur. Bunları da tablo şeklinde inceleyelim.

Tablo 5.3 Özel tarih biçimlendirmeleri


Görüntüleme
İşaret Tip (Ağustos 3, 2009 DateTime t = DateTime.Now;
10:45:26)
dd Gün 03 Console.WriteLine("{0:dd}", t);
ddd Kısa Gün Adı Sa Console.WriteLine("{0:ddd}", t);
dddd Tam Gün Adı Salı Console.WriteLine("{0:dddd}", t);
hh 2 Rakam Saat 10 Console.WriteLine("{0:hh}", t);
HH 2 Rakam Saat (24 saat) 10 Console.WriteLine("{0:HH}", t);
mm 2 Rakam Dakika 45 Console.WriteLine("{0:mm}", t);
MM Ay 08 Console.WriteLine("{0:MM}", t);
MMM Kısa Ay Adı Ağu Console.WriteLine("{0:MMM}", t);
MMMM Tam Ay Adı Ağustos Console.WriteLine("{0:MMMM}", t);
ss Saniye 26 Console.WriteLine("{0:ss}", t);
tt AM/PM PM Console.WriteLine("{0:tt}", t);
yy 2 Rakam Yıl 09 Console.WriteLine("{0:yy}", t);
yyyy 4 Rakam Yıl 2009 Console.WriteLine("{0:yyyy}", t);
Ayraç, Örneğin:
: 10:45:26 Console.WriteLine("{0:hh:mm:ss}", t);
{0:hh:mm:ss}
Ayraç, Örneğin:
/ 03/08/2009 Console.WriteLine("{0:dd/MM/yyyy}", t);
{0:dd/MM/yyyy}

125
5
C# ile Dosya İşlemleri

Öğrenme Çıktısı
2 Giriş-çıkış akımlarının kullanımını kavrayabilme
3 Metin ve tarih biçimlendirmesini kavrayabilme

Araştır 2 İlişkilendir Anlat/Paylaş

Tarih değerinin formatlana- Metin formatını kullana-


C# dilinde, yazıcıdan çıktı
rak kullanıldığı bir durumu rak, C# kodu ile bir form
alınabilmesini sağlayan sınıf
araştırarak programda nasıl oluşturup nasıl doldurabile-
hangisidir?
yapabileceğinizi düşünün. ceğinizi paylaşın.

KONSOL (CONSOLE) İŞLEMLERİ


Öncelikle C# console nedir bunun cevabını arayalım. C# kod geliştirme ortamı olan Visual Studio ile
yeni bir proje oluştururken “Windows Forms Application” ve “Console Application” gibi seçenekler karşı-
mıza çıkmaktadır. Peki, bunların arasındaki fark nedir?
Windows Forms Application, programcıya kullanım kolaylığı sağlayarak hazır bileşenler sunan (form,
textBox, radioButton, comboBox vs.) grafik arayüzüne sahip bir C# proje türüdür. Console ise grafik
arayüzü bulunmayan, girdi ve çıktıların siyah bir ekranda işlendiği kullanıcı arayüzüdür. Hazır bileşenler
bu yapı içinde yoktur.
Burada birkaç console işlemini inceleyeceğiz.
• Console.SetWindowSize(x, y): Konsolun büyüklüğünü yani ekran genişliğini ayarlamaya yara-
yan metottur. İlk parametresi karakter olarak genişliği, ikinci parametre de satır olarak yüksekliği
belirtmektedir.
Console.SetWindowSize(100, 50);

Görsel 5.1 Konsol boyutlarının ayarlaması

126
5
İleri Programlama I

• Console.BackgroundColor, Console.ForegroundColor: Console ekranında, yazı rengi ve yazının


vurgu rengi sistemde tanımlı olan 16 renkten biri seçilerek tanımlanabilmektedir.
- ForegroundColor ile yazı rengi
- BackgroundColor ile de yazının vurgu rengi ayarlanır.
- Console.ResetColor() metodu ile renkler eski hâline döndürülür.

Tablo 5.4 Konsol renk isimleri


Black Siyah
DarkBlue Koyu Mavi
DarkGreen Koyu Yeşil
DarkCyan Koyu Cam Göbeği
DarkRed Koyu Kırmızı
DarkMagenta Koyu Magenta
DarkYellow Koyu Sarı
DarkGray Koyu Gri
Gray Gri
Blue Mavi
Green Yeşil
Cyan Cam Göbeği
Red Kırmızı
Magenta Magenta
Yellow Sarı
White Beyaz

using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
// Konsol uygulamasının başlığını değiştirir
Console.Title = "Anadolu Üniversitesi";

// Yazıların arka plan rengini değiştirir


Console.BackgroundColor = ConsoleColor.Gray;

// Yazıların metin rengini değiştirir


Console.ForegroundColor = ConsoleColor.DarkRed;

// Ekrana yazı yazdırır


Console.WriteLine("C# ile kodlamayı öğreniyorum!!!");
}
}
}
127
5
C# ile Dosya İşlemleri

Kodumuz çalıştırılınca konsolumuz Görsel 5.2’deki gibi olacaktır.

Görsel 5.2 Renklendirilmiş yazının konsol görünümü

• Console.CursorLeft, Console.CursorTop: Konsol üzerindeki imlecin konumunu verilen koordi-


natlara getirmek için kullanılır. Aynı işlemi tek başına yapan başka bir metot da
Console.SetCursorPosition(x, y)’dir.

using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Console.Title = "Cursor Position";
Console.CursorLeft = 20;
// 20 karakter sonra yazı yazmaya başla
Console.CursorTop = 20;
// 20 satır sonra yazı yazmaya başla
Console.ForegroundColor = ConsoleColor.DarkGreen;
Console.Write("Merhaba Dünya! C# Öğreniyorum!");
}
}
}

128
5
İleri Programlama I

Görsel 5.3 Renklendirilmiş ve konumu düzenlenmiş yazının konsol görünümü

• Console.Clear(): Bu metot ile console ekranını temizlenir.

Öğrenme Çıktısı
4 Konsol penceresinin kullanımını kavrayabilme

Araştır 3 İlişkilendir Anlat/Paylaş

Windows ve Linux işletim Konsol ile windows form Kullandığınız konsol uygu-
sistemleriyle birlikte gelen uygulamalarının aynı işlem- laması varsa hangi proble-
konsol uygulamaları neler- leri hangi şekilde çözdükle- min çözümü için kullandı-
dir araştırın. rini araştırın. ğınızı anlatın.

129
5
C# ile Dosya İşlemleri

Araştırmalarla
İlişkilendir
ELEKTRONİK ORTAMDA BELGELERİN GÜVENLİ PAYLAŞIMI;
ÜLKE UYGULAMALARI VE ÜLKEMİZ İÇİN ÖNERİLER
1960’larda askerî amaçlı, 1970 ve 1980’li yıllarda ise üniversitelerde araştırma amaçlı olarak kul-
lanılan bilgi teknolojileri, bugün gelinen noktada teknoloji ile iletişimin yaygınlaşması sonucu Bilgi
ve İletişim Teknolojilerine (BİT) evirilerek ekonomik ve sosyal hayatımızın hemen her alanında yerini
almıştır. Bilgi Çağı olarak tanımlanan içinde bulunduğumuz çağda, toplumlar ve devletler mevcut ya-
pılarını daha önce görülmemiş bir hızda kaçınılmaz olarak değiştirmektedir.
BİT’de yaşanan gelişmeler, kurum ve kuruluşların iş süreçlerinde değişimlere neden olmuştur. Bu
değişimin en önemli göstergelerinden birisi, kurum ve kuruluşlar tarafından sunulan hizmetlerin her
geçen gün artan ölçüde elektronik uygulamalara (e-devlet, e-ticaret, e-eğitim vb.) konu olmasıdır. Bu
gelişmelere bağlı olarak kurum ve kuruluşlar da iş süreçlerini e-ortama taşımaya ve resmî yazışmalar,
tebligatlar, başvurular, ihtarnameler ve sözleşmeler de dâhil olmak üzere e-ortamda çok sayıda bilgi ve
belge üretmeye başlamıştır.
Bununla birlikte e-ortamda üretilen bilgi ve belgenin yasal zorunluluk, maliyet düşüklüğü, iş ve
işlemlerin hızlı bir şekilde gerçekleştirilmesi gibi sebeplere paralel olarak, üretilen her belgenin güvenli
bir şekilde kaydedilmesi, kullanılması, saklanması ve paylaşılması daha fazla önem kazanmaya başlamış-
tır. Paylaşılan bu belgelerin “belge özelliklerinin” bir bütün olarak bozulmadan varlığını ve güvenliğini
koruyabilmesi, paylaşım aşamasındaki taraflar açısından da önemlidir. Bu önem, taraflar arasında etkin
bilgi ve belge paylaşımının sağlanabilmesini, kurumsal bilgi ve belgelerin önceden belirlenen bir sis-
tem içerisinde düzenlenmesini zorunlu kılmaktadır. Bu nedenle, elektronik hizmetleri kullanan ya da
e-ortamdaki bilgi ve belgelerini paylaşan tarafların, e-ortamda işlemleri güvenli bir şekilde gerçekleştir-
mek ve muhataplarıyla karşılıklı güveni sağlamak için uygun güvenlik kontrollerine ve mekanizmaları-
na sahip olması önem arz etmektedir.
Bu çerçevede e-belgenin, e-ortamda paylaşımı için bugün dünyada; Sanal Özel Ağ (VPN), Güvenli
Yuva Katmanı (SSL), Kiralık Hat, Dosya Aktarım Protokolü (FTP) ve e-Posta gibi yöntemler yaygın
olarak kullanılmaktadır. Ancak söz konusu yöntemler güvenli e-belge paylaşımına ilişkin çeşitli kriter-
leri sağlamaları açısından farklılaşmaktadır.

Kaynak: Yılmaz, M. (2013). ELEKTRONİK ORTAMDA BELGELERİN GÜVENLİ PAYLAŞIMI;


ÜLKE UYGULAMALARI VE ÜLKEMİZ İÇİN ÖNERİLER. İdari Uzmanlık Tezi. BİLGİ TEKNO-
LOJİLERİ VE İLETİŞİM KURUMU

130
5
İleri Programlama I

Dosya oluşturma, okuma


1 ve dosyaya yazma
işlemlerini kavrayabilme

öğrenme çıktıları ve bölüm özeti


Dosya İşlemleri

İşletim sisteminde dosyaların oluşturulması, okunması ve içerisine veri yazılması gibi işlemleri C# kodları ile
yapılabilmektedir. Dosyalar 6 farklı türde açılabilmektedir. Bunlar:
• Append: Dosya yoksa oluşturulur, varsa sonuna ekleme yapmak için açar.
• Create: Dosya yoksa oluşturulur, varsa üzerine yazar.
• CreateNew: Dosya yoksa oluşturur, varsa hata verir.
• Open: Dosyayı açar, yoksa hata verir.
• OpenOrCreate: Dosyayı açar, yoksa oluşturur.
• Truncate: Dosyanın içeriğini silerek açar.
Bunların yanında dosyaya erişim için de 3 opsiyonumuz mevcuttur. Bunlar:
• Read: Dosyayı sadece okumak için açar.
• Write: Dosyayı sadece yazmak için açar.
• Read/Write: Dosyayı hem okumak hem de yazmak için açar.
Dosya erişim kodları ile dosya açabilir, bu dosyaların içeriklerini başka dosyalara aktarabilir ve klasörler üzerin-
de işlemler yapabiliriz. Kısacası, C# dosya işlemleri, bir grafik arayüz ile bilgisayarımızda yapabileceğimiz tüm
işlemleri kod ile gerçekleştirilmesine izin vermektedir.
DirectoryInfo ve FileInfo Sınıfları ile dosya ve klasörlerin tüm özelliklerine erişilebilir.

131
5
C# ile Dosya İşlemleri

2 Giriş-çıkış akımlarının
kullanımını kavrayabilme
öğrenme çıktıları ve bölüm özeti

Metin ve tarih
3 biçimlendirmesini
kavrayabilme

Giriş/Çıkış (Input/Output)
Fonksiyonları

Konsol için tanımlanmış 3 adet akım vardır. Bunlar Console.Out, Console.Error ve Console.In’dir. Bu akımlar
ekrana ve dosyaya yazdırmak ve veri okumak için kullanılır.
Ekrana veya dosyaya sayı ve metinsel ifadeler formatlanarak yazdırılabilir. Birden fazla şekilde formatlama yapı-
labilmektedir. Farklı kullanımları bir örnek ile gösterebiliriz.

double feet = 7;
double santimetre = feet * 30.48;
Console.WriteLine("{0} feet {1} santimetre eder", feet, santimetre);
Console.WriteLine($"{feet} feet {santimetre} santimetre eder");
Console.WriteLine(feet + " feet " + santimetre + " santimetre eder");

Ayrıca, özellikle sayısal ifadeleri de başlarına boşluk konulması gibi değişik şekillerde formatlanarak ekrana
yazdırılabilir.
C# dilinde, tarih değerleri de formatlanabilmektedir. Bu formatlı tarih değerleri de ihtiyaca uygun şekilde ve
yerlerde kullanılmaktadır. Örneğin, kayıt tarihi isminde bir tarih tutan değişkenimiz olsun. Bu değişkenin bize
sadece gün-ay-yıl şeklindeki bilgisi lazım olsun. Ama elimizdeki değişkenin değeri gün, ay, yıl ve saat, dakika ve
saniye verileri de tutabilsin. Burada elimizdeki büyük verinin içerisinden istediğimiz formattaki veriyi alıyoruz.

4 Konsol penceresinin
kullanımını kavrayabilme

Konsol (Console) İşlemleri

Görsel arayüzlü programlama dilleri çıkmadan önce, tüm bilgisayar programları siyah ya da mavi gibi tek renkli
ekranlarda yazılıyor ve çıktılar yine bu ekranlarda gözüküyordu. Windows forms application ise görsel bir ara-
yüze sahip ve hazır bileşenler sunan bir proje türü olarak karşımıza çıkmaktadır.
Konsol programları, konsol ekranının büyüklüğü, yazı ve arka plan renkleri, kursör (cursor) pozisyonu gibi
çeşitli özelliklerinin düzenlenmesine izin vermektedir.

132
5
İleri Programlama I

1 Aşağıdakilerden hangisi dosya açma şekillerinden biri değildir?


A. Append B. Truncate C. CreateNew D. OpenNew E. OpenOrCreate

neler öğrendik?
2 Aşağıdakilerden hangisi bir I/O (Input/Output) işlemi değildir?
A. Console.WriteLine
B. Main metodu
C. Dosya kayıt
D. Yazıcıdan çıktı alma
E. Fare hareketleri

3 Dosya işlemlerinde StreamWriter kullanıldıktan sonra hangi metot ile kapatılması gerekmektedir?
A. Exit B. Return C. Back D. Close E. New

4 Konsoldan bilgi almak için kullanılan Read() ve ReadLine() komutları için aşağıdaki açıklamalardan
hangisi doğru olarak verilmiştir?
A. Read metodu, bir karakter okur ve sonucu int olarak alır. ReadLine metodu, enter tuşuna basana kadar
karakterleri okur ve sonucu string olarak alır.
B. Read metodu, bir karakter okur ve sonucu char olarak alır. ReadLine metodu, enter tuşuna basana kadar
karakterleri okur ve sonucu int olarak alır.
C. Read metodu, enter tuşuna basana kadar karakter okur ve sonucu char [ ] olarak alır. ReadLine metodu,
enter tuşuna basana kadar karakterleri okur ve sonucu int [ ] olarak alır.
D. Read metodu, enter tuşuna basana kadar karakter okur ve sonucu int [ ] olarak alır. ReadLine metodu,
enter tuşuna basana kadar karakterleri okur ve sonucu string olarak alır.
E. Read metodu, enter tuşuna basana kadar karakter okur ve sonucu string olarak alır. ReadLine metodu,
enter tuşuna basana kadar karakterleri okur ve sonucu char [ ] olarak alır.

5 WriteLine metodu için verilen aşağıdaki örneklerden hangisi yanlıştır?


A. Console.WriteLine(“{0} feet {1} santimetre eder”, feet, santimetre);
B. Console.WriteLine($”{feet} feet {santimetre} santimetre eder”);
C. Console.WriteLine(feet + “ feet “ + santimetre + “ santimetre eder”);
D. Console.WriteLine(“{0} feet {1} santimetre eder”, feet, (feet * 30.48));
E. Console.WriteLine(feet + “ feet “ + { feet * 30.48 } + “ santimetre eder”);

6 DateTime t = DateTime.Now; olarak alındığı bir durumda, aşağıda verilen formatlı tarih gösterimle-
rinden hangisi yanlış verilmiştir?
A. Console.WriteLine("{0:hh:mm:ss}", t); Çıktısı: 04:32:47
B. Console.WriteLine("{0:dd}", t); Çıktısı: 23
C. Console.WriteLine("{0:MM}", t); Çıktısı: Haz
D. Console.WriteLine("{0:dddd}", t); Çıktısı: Perşembe
E. Console.WriteLine("{0:MMM}", t); Çıktısı: Haziran

133
5
C# ile Dosya İşlemleri

7 string kaynak = @"C:\tmp\";


string hedef = @"C:\tmp2\";
var dosyalar = new DirectoryInfo(kaynak).GetFiles(“*.*”);
neler öğrendik?

foreach (FileInfo dosya in dosyalar)


{
if( dosya.Name.Contains( ".docx" ) )
dosya.CopyTo(hedef + dosya.Name);
}

Yukarıdaki kod parçasında yapılan işlem aşağıdakilerden hangisidir?


A. Kaynak klasördeki dosyaların hepsini hedef klasörüne kopyalanması
B. Kaynak klasördeki dosyalardan içinde nokta “.” geçenlerin hedef klasöre kopyalanması
C. Kaynak klasördeki dosyalardan uzantısı “docx” olanların hedef klasörüne kopyalanması
D. Kaynak klasördeki dosyalardan uzantısı “docx” olmayanların hedef klasörüne kopyalanması
E. Kaynak klasördeki dosyalardan içinde yıldız “*” geçenlerin hedef klasöre kopyalanması

8 Windows form application ile console application arasındaki fark aşağıdaki seçeneklerden hangisinde
doğru verilmiştir?
a. Windows form application windows içindir, console application ise sadece linux işletim sisteminde
kullanılabilir.
b. Windows form application grafik arayüzüne sahiptir. Console application ise siyah ekranlı, grafik arayü-
zü olmayan bir arayüzdür.
c. Windows form application siyah ekranlı, grafik arayüzü olmayan bir arayüzdür. Console application ise
grafik arayüzüne sahiptir.
d. Windows form application form oluşturabilir, console application ise sadece radioButton oluşturabilir.
e. Windows form application yavaş uygulamalar, console application ise hızlı uygulamalar için tasarlanmıştır.

9 I. Console.SetWindowSize: Konsol ekranının büyüklüğünü ayarlar


II. Console.ForegroundColor: Arka plan rengini değiştirir
III. Console.BackgroundColor: Yazıların metin rengini değiştirir
Yukarıdaki eşleştirmelerden hangisi ya da hangileri doğru olarak verilmiştir?
A. Yalnız I B. Yalnız II C. Yalnız III D. II ve III E. I ve II

10
Console.CursorLeft = 20;
Console.CursorTop = 20;
Console.ForegroundColor = ConsoleColor.DarkGreen;
Console.Write("Merhaba Dünya! C# Öğreniyorum!");
Yukarı verilen kod parçasının konsola yazdıracağı metnin konum ve renk özellikleri aşağıdakilerden hangi-
sinde doğru olarak verilmiştir?
A. DarkGreen ekranda Siyah yazı ile soldan 20 ve sağdan 20 boşluk ile
B. DarkGreen ekranda Siyah yazı ile soldan 20 ve alttan 20 boşluk ile
C. DarkGreen ekranda Siyah yazı ile soldan 20 ve üstten 20 boşluk ile
D. DarkGreen yazı ile Siyah ekranda soldan 20 ve sağdan 20 boşluk ile
E. DarkGreen yazı ile Siyah ekranda soldan 20 ve üstten 20 boşluk ile

134
5
İleri Programlama I

Yanıtınız yanlış ise “Giriş/Çıkış (Input/Out-


1. D Yanıtınız yanlış ise “Dosya İşlemleri” konu- 6. C
put) Fonksiyonları” konusunu yeniden göz-
sunu yeniden gözden geçiriniz.
den geçiriniz.

neler öğrendik yanıt anahtarı


2. B Yanıtınız yanlış ise “Dosya İşlemleri” konu- 7. C Yanıtınız yanlış ise “Dosya İşlemleri” konu-
sunu yeniden gözden geçiriniz. sunu yeniden gözden geçiriniz.

3. D Yanıtınız yanlış ise “Dosya İşlemleri” konu- 8. B Yanıtınız yanlış ise “Console İşlemleri” ko-
sunu yeniden gözden geçiriniz. nusunu yeniden gözden geçiriniz.

Yanıtınız yanlış ise “Giriş/Çıkış (Input/Out-


4. A 9. A Yanıtınız yanlış ise “Console İşlemleri” ko-
put) Fonksiyonları” konusunu yeniden göz-
nusunu yeniden gözden geçiriniz.
den geçiriniz.

Yanıtınız yanlış ise “Giriş/Çıkış (Input/Out-


5. E 10. E Yanıtınız yanlış ise “Console İşlemleri” ko-
put) Fonksiyonları” konusunu yeniden göz-
nusunu yeniden gözden geçiriniz.
den geçiriniz.

Araştır Yanıt
5 Anahtarı

C# programlama dili ve diğer çoğu dilde, farklı dosya türleri ile işlem ya-
pabilmek için ilgili dosya türüne uygun geliştirilmiş kütüphanenin sisteme
eklenmesi gerekmektedir. Bu kütüphanede dosya türüne özel olarak hazırlan-
Araştır 1 mış metotları kullanarak, dosya işlemlerini kolay bir şekilde yapabiliriz. Bu
soru için de Microsoft Excel için hazırlanmış bir kütüphaneyi referans olarak
ekleyip kullanabiliriz.

Araştır 2 PrintDocument sınıfı yardımı ile C# dilinde kod ile yazıcıdan çıktı alına-
bilmektedir.

Windows ile birlikte gelen iki adet konsol vardır. Bunlardan ilki CMD uygu-
Araştır 3 laması, diğeri de Windows Power Shell’dir. Linux işletim sisteminde ise konsol
uygulamasına Terminal adı verilir.

Kaynakça
C# txt Dosyası İçeriğini Okuma ve Yazma. (2018). (2021, Ağustos 19). https://www.algoritmaornekleri.com/c-
sharp/c-txt-dosyasi-icerigini-okuma-ve-yazma/
C# Console Dersleri Ders-9 “Dosya İşlemleri-1 Dosya oluşturma ve Dosyaya Veri Yazma”. (2017). (2021,
Ağustos 19). http://teknokafe.net/2017/10/23/c-console-dersleri-ders-9-dosya-islemleri-1-dosya-
olusturma-ve-dosyaya-veri-yazma/
Kefeli, K. (2016). C# Dosya İşlemleri. (2021, Ağustos 20). https://www.kemalkefeli.com.tr/csharp-dosya-
islemleri.html
Akgül, B. (2015). Input/Output Fonksiyonları. (2021, Ağustos 20). https://slideplayer.biz.tr/slide/2798414/

135

You might also like