Professional Documents
Culture Documents
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:
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
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.
Ş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:
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
using System;
using System.IO;
namespace DosyaIslemleri
{
class Program
{
static void Main(string[] args)
{
string dosya = "C:\\tmp\\yeni_dosya.txt";
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:
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";
Ö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ı.
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.WriteLine("Dosyalar: ");
for(int i=0;i<dosyalar.Length; i++)
Console.WriteLine( dosyalar[i]);
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.
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
118
5
İleri Programlama I
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("*.*");
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
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.
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");
}
}
}
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.
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.
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.
Ö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] }
123
5
C# ile Dosya İşlemleri
İ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:
• -- 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.
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
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
126
5
İleri Programlama I
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";
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
Öğrenme Çıktısı
4 Konsol penceresinin kullanımını kavrayabilme
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.
130
5
İleri Programlama I
İş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
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
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.
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
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.
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
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.
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