Verileri Sıralı ve Random Erişimli Dosyalamak

Benzer belgeler
13- DOSYALAR(FILES ) ( using System.IO; // Input Otput ) M.İLKUÇAR - 1

Temel Dosya İşlemleri. Kütük Organizasyonu 1

Temel Bilgisayar Programlama

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-8 Dosya İşlemleri-1. Yrd. Doç. Dr. Ümit ATİLA

C Dosyalama. Öğr. Gör. M. Ozan AKI. Rev 1.0

Yrd. Doç. Dr. Caner ÖZCAN

Eln 1002 Bilgisayar Programlama II

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

Genel Programlama II

ALGORİTMA VE PROGRAMLAMA II

Yrd. Doç. Dr. Caner ÖZCAN

PROGRAMLAMA. Dosyalama İşlemleri. Yrd. Doç. Dr. Bülent Çobanoğlu. Sakarya Üniversitesi Mekatronik Mühendisliği. Yrd.Doç.Dr.

BMB1002 Bilgisayar Programlamaya Giriş. Dosyalar. Prof. Dr. Necmettin Kaya

Temel I/O ve String İşlemleri. Programlama Dilleri III

Dosyalar 1.1 Dosya Nedir?

DOSYALAR. Temel terimler Hafta. Dr. Fahri Vatansever

DOSYA İŞLEMLERİ Programlama dilleri hafta -

ALGORİTMA VE PROGRAMLAMA II

10. DOSYA GİRİŞ ÇIKIŞ FONKSİYONLARI

mod ile açılacak olan dosyanın ne amaçla açılacağı belirlenir. Bunlar:

ENF102 TEMEL BİLGİSAYAR BİLİMLERİ VE C/ C++ PROGRAMLAMA DİLİ. Gazi Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

Visual Basic. Dosya İşlemleri

ÜNİTE NESNE TABANLI PROGRAMLAMA I İÇİNDEKİLER. Okt. Mustafa AKBUĞA HEDEFLER DOSYA VE KLASÖR İŞLEMLERİ

şeklinde tanımlanmıştır. O halde, dosyaları daha önceki bilgilerimizi kullanarak FILE *Dosya1, *Dosya2;

12. Saat : Dosyalar I (Files)

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

Metin Dosyaları. Metin Dosyaları Dosya Açma ve Kapama Dosya Okuma ve Yazma Rastgele Erişim Standart Girdi/Çıktı Hata Kontrolü

Visual Basic 6.0. Anadolu Üniversitesi Endüstri Mühendisliği Bölümü. Dosyalama İşlemleri. Ders Notları

İSMET AKTAR ANADOLU TEKNİK LİSESİ BİLİŞİM TEKNOLOJİLERİ ALANI WEB PROGRAMCILIĞI DALI

ÜNİTE NESNE TABANLI PROGRAMLAMA I İÇİNDEKİLER. Okt. Mustafa AKBUĞA HEDEFLER DOSYA VE KLASÖR İŞLEMLERİ

Eln 1001 Bilgisayar Programlama I

Görsel Programlama 1

Chapter 11 Dosya İşleme

Timer İle arka plan renk değişimi

BÖLÜM 12: DOSYA İŞLEMLERİ

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

11- FONKSİYONLAR (FUNCTIONS)

C/C++ Disk G/Ç İşlemleri. Yrd. Doç. Dr. Fehim KÖYLÜ Erciyes Üniversitesi Bilgisayar Mühendisliği Bölümü

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

JAVA DA GİRİŞ/ÇIKIŞ İŞLEMLERİ. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 9 1

ELN1001 BİLGİSAYAR PROGRAMLAMA I

DÖNGÜLER (LOOPS) while(), do-while(), for(), foreach()

Pascalda oluşturulacak dosyalar değişkenler gibi programın başında tanımlanır.

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

Yrd. Doç. Dr. Caner ÖZCAN

Fen ve Mühendislik Uygulamalarında MATLAB

/*int sayi1, sayi2,toplam=0;

Programlama Dilleri 3

Yrd. Doç. Dr. Caner ÖZCAN

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-3 İşaretçiler (Pointer) (Kısım-2)

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

12- HAZIR FONKSİYONLAR

Dersin Sorumlusu: Yrd. Doç. Dr. Birol SOYSAL. Sunumları Hazırlayan: Doç. Dr. Bülent ÇAKMAK

HSancak Nesne Tabanlı Programlama I Ders Notları

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM

// hataları işaret eden referans

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

BİLGİSAYAR UYGULAMALARI Şırnak Üniversitesi Mühendislik Fakültesi Güz Dönemi Arş.Gör. Eren DEMİR ve Arş.Gör. Veysel KIŞ (

İşletim Sistemleri. Hazırlayan: M. Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

Fiziksel Veritabanı Modelleme

BM102 BİLGİSAYAR PROGRAMLAMA II LABORATUVAR UYGULAMALARI. 3Hafta

ALGORİTMA VE PROGRAMLAMA I

Bilgisayar Programlama MATLAB

Endüstri Mühendisliği Bölümü Bilgisayar Programlama Ders Notları

Temel Giriş/Çıkış Fonksiyonları

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ

Dosyalarda Farklı Yaklaşımlar. Kütük Organizasyonu 1

C# Çalışma Örnekleri

D İ Z İ L E R A R R A Y S

Operator Aşırı Yükleme (Operator OverLoading)

Sıralı bir dosyayı açmak için FileOpen komutundan faydalanılır. Bu komutun genel kullanılış biçimi aşağıdaki gibidir:

PROGRAMLAMAYA GİRİŞ DERS 2

MATLAB de Programlama & Dosya Yönetimi. EE-346 Hafta 6 Dr. Ayşe DEMİRHAN

7.1- C#.net Giriş Çıkış İşlemleri ve Visual Studio. M.İLKUÇAR - 1

BİLGİSAYAR PROGRAMLAMA Araş. Gör. Ahmet ARDAHANLI. Kafkas Üniversitesi Mühendislik Fakültesi

BLG4134 Görsel Programlama III. Öğr. Grv. Aybike ŞİMŞEK

ALGORİTMA VE PROGRAMLAMA II

BİLG Dr. Mustafa T. Babagil 1

KONU 7: DOSYA İŞLEME ( File Processing )

NESNEYE YÖNELİK PROGRAMLAMA

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

Örnek 4: Örnek Özyinelemeli fonksiyon örneği Bölüm 9. C++ programlama dilinde Nesne ve sınıf

#include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct { int ID; char isim[15]; char soyisim[15];

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 7. Bölüm Metot Tanımlama ve Kullanma

Qt ile Bir Ağ Uygulaması

Yrd. Doç. Dr. Caner ÖZCAN

işlemler bittikten sonra dosyaların kapatılması uygun olacaktır. Bunun için, fclose(fin);

while(), do-while(), for() M.İLKUÇAR 2010 MAKU-MYO

Girdi Çıktı İşlemleri

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

YZM 2105 Nesneye Yönelik Programlama

BLM 112- Programlama Dilleri II. Hafta 4 İşaretçiler (Pointers)

Sistem Programlama. Kesmeler(Interrupts): Kesme mikro işlemcinin üzerinde çalıştığı koda ara vererek başka bir kodu çalıştırması işlemidir.

Yrd. Doç. Dr. Caner ÖZCAN

JAVADA DİZİ İŞLEMLERİ

MapCodeX MapLand Kullanım Kılavuzu

BLM 112- Programlama Dilleri II. Hafta 5 İşaretçiler (Pointers)

Transkript:

Verileri Sıralı ve Random Erişimli Dosyalamak

İçerik Seri ve Rastgele erişimli dosyalar Dosya sistemleri üzerinde çalışmak C ve C# dilleri ile dosyalar ve akımlar üzerinde okuma/yazma işlemleri yapmak.

Program sonlandırıldığında program içerisnde üzerinde işlem yapılan tüm veriler kaybolmaktadır. Eğer bu verilerin kaybolmadan saklanması isteniyorsa dosyalama işlemine gereksinim duyulur. C programlama dilinde I/O işlemleri için bir çok fonksiyon bulunmakdır. Bu fonksiyonlar 2 şekilde kategorize edilebilir. Text Dosyalar Binary Dosyalar

Dosyalama İşlemleri Yeni dosya oluşturma (Creating) Varolan dosyanın açılması (Opening) Dosyadan very okunması ve yazılması (Read and Write ) Dosyanın sonlandırılması (Closing file)

Dosyalarla çalışırken, file türünde pointer tanımlanması gerekir. Bu tanımlama dosya ve program arasındaki iletişimin sağlanması açısından gereklidir. FILE *ptr;

C de, standart dosya yapısı tanımlanmıştır. Stdio.h başlık dosyasında FILE yapısı aşağıdaki gibidir:

Standart Dosyalar Bilgisayara veri giriş-çıkışıiçin kullanılan klavye ekran, printerve portlarıda birer dosya olarak tanımlamak mümkündür. Bu cihazlar sıralıerişimli dosya gibi davranırlar. Klavye stdin Ekran stdout Printer stdprn Yrd. Port stdaux Ayrıca hata mesajlarının yazıldığıbir çıkışdosyasıvardır. Bu da stderr dir.bu dosyalar programın başında otomatik olarak tanımlanıp kullanım için açılırlar.

Dosya açma/kapama (fopen, fclose) Dosya açmak için kullanılan yazım şekli ptr= fopen( fileopen, mode ) fopen( C:\\cfileoperations\program.txt, w );

File Mode Anlamı Dosyanın olmaması durumunda gerçekleşecekler r Okuma için açma Eğer dosya mevcut değilse, fopen() NULL değeri döndürür. w Yazma için açma Eğer dosya mevcutsa içeriğin üzerine yazılır. Tersi durumda (mevcut değilse) dosya oluşturulur. a Ekleme için açma. Veri dosyanın sonuna eklenir. r+ Yazma ve okuma için açılır. w+ Yazma ve okuma için açılır. a+ Yazma ve okuma için açılır. Eğer dosya mevcut değilse oluşturulur. Eğer dosya mevcut değilse, fopen() NULL değeri döndürür. Eğer dosya mevcutsa içeriğin üzerine yazılır. Tersi durumda (mevcut değilse) dosya oluşturulur. Eğer dosya mevcut değilse oluşturulur.

Dosyanın kapatılması, dosya tampon belleğinin diske kaydedilmesi ve dosya ile ilişkinin kesilmesi demektir. 2 farklı şekilde dosya kapatılabilir: flush() fclose()

Yazmak için açılan dosyanın tampon belleğindeki bilgileri diske aktarır. Okumak için açılan dosyalarla bir ilgisi yoktur. Fonksiyondan sonra dosya ile olan ilişki hala devam eder. Tamamen kapatmak için fclose() veya fcloseall() kullanılmalıdır. flush (ptr) //Dönen değer 0 ise işlem başarılıdır. flush (void) // Açılmış olan bütün dosyaların tampon bellelerini diske aktarır. fclose(ptr) fcloseall(void) //Dosyayı kapatır. //Açık olan tüm dosyaları kapatır.

fputc & fgetchar Heriki fonksiyonun yazım şekilleri int fputc(int char, FILE *stream) int fgetchar(file *stream)

Binary Dosyalar Eğer büyük miktarlarda veri depolama durumu sözkonusu ise text şeklinde depolama yeterli olmayacaktır. Böyle bir durumda binary olarak depolama tercih edilir. Binary şeklinde okuma/yazma text modunda okuma ve yazmaya oldukça benzer. Farklılık dosyayı açma modunda kendini gösterir. Bu modlar; rb, rb+, wb, wb+, ab ve ab+ dir.

fread ve fwrite fonksiyonları binary dosyaları okuma ve yazma için sırasıyla kullanılır. fwrite ın yazım şekli; fwrite (address_data, size_data, numbers_data, pointer to file)

Sequential & Random Access

Sequential Files: Sıradüzensel olarak verilerin işlendiği durumlarda tercih edilir. Örn: text dosyadaki kelimelerin sayılması. Kayıtlı verileri silerken önceki verilerde kayıplar meydana gelir. Kayıtların boyutları çoğu durumda sabit değildir.

Random Access Files: Verileri sıradüzensel olarak işlemek yerine dosyanın okunacağı ve/veya yazılacağı lokasyona erişim için kullanılır. Kayıtların boyutları sabittir. Çoğu durumda hybrid yaklaşım tercih edilir.

3 Temel Fonksiyon rewind() //dosya pointerını dosyanın başlangıcına konumlandırır. fseek() //dosya pointerının pozisyonu ftell() // dosya pointerının o anki konumunu geriye döndürür. Bu fonksiyonların herbiri C dosya işaretçisi üzerinde çalışırlar. Dosya içindeki herhangi bir kaydın konumu =Dosyanın başlangıcı + offset

rewind() Hem sıralı hemde rastgele erişimli dosyalarda kullanılır. Dosya sistemine, dosya pointerının dosyanın başlangıcına konumlanmasını bildirir. Herhangi bir hata durumu sözkonusu ise bunu temizler. Herhangi bir değer geriye dönmez. fseek() fonksiyonu da benzer özellik için kullanılabilir.

fseek & ftell Bu fonksiyon eğer kayıt boyutu (record size) bilindiği veya kaydın başlangıç ve bitiş adresleri bilindiği durumlarda çok fazla tercih edilir. 3 parametre almaktadır. Bunlar: FILE *f // dosya pointerı Long offset // offsetin pozisyonu Int origin // offsetin uygulanacağı nokta

FILE *f Long offset Int origin // dosya pointerı // offsetin pozisyonu // offsetin uygulanacağı nokta Origin parametresi aşağıdaki 3 farklı değerden birini alabilir. SEEK_SET // Başlangıçtan itibaren SEEK_CUR // Şu anki bulunulan konumdan itibaren SEEK_END // Sondan itibaren

Dosyanın başlangıcına konumlanmak istenirse; fseek(f, 0, SEEK_SET) =~ rewind() Dosyanın sonuna kayıt eklenmek istenirse, dosya pointerı fseek(f, 0, SEEK_END) Dosya pointerının bulunduğu konum bilgisi; long file_marker = ftell(f) //sonrasında fseek fseek(f, file_marker, SEEK_SET)

Error Handling Birçok C fonksiyonu hata durumunda -1 veya NULL geriye döndürür. Program çalışmasını başarılı bir şekilde sona erdirdiği durumda geriye 0(sıfır) döndürür.

Global Variable errno Eğer fonksiyonun çalışması sırasında herhangi bir hata meydana gelirse herhangi bir int değer set edilir. errno yu kullanabilmek için errno.h ın programa dahil edilmesi ve extern olan extern int errno nun çağrılması gerekir.

Value of errno is : 2

strerror & perror errno ile ilişkili text içeriğin gösterilmesi için kullanılan iki fonksiyondur. strerror, errno ile ilişkili olarak görüntülenecek text içeriğin pointer bilgisini geri döndürür. perror ise programcının belirleyeceği text mesajı görüntüler.

C# da Dosyalama İşlemleri (File Operations in C#)

.NET, sürücüler, dosyalar ve klasörler üzerinde temel işlemleri gerçekleştirmek için sınıfları bünyesinde barındırır.

Sürücüler DriveInfo.GetDrives() (static) (System.IO NS) class Program static void Main(string[] args) foreach (DriveInfo di in DriveInfo.GetDrives()) Console.WriteLine("0 (1)",di.Name,di.DriveType);

AvailableFreeSpace DriveFormat DriveType IsReady Name RootDirectory TotalFreeSpace VolumeLabel

Dosya ve Klasör Yönetimi class Program static void Main(string[] args) DirectoryInfo dir = new DirectoryInfo(@"C:\Windows"); Console.WriteLine("Klasörler"); Console.WriteLine("**********"); foreach (DirectoryInfo dirinfo in dir.getdirectories()) Console.WriteLine(dirInfo.Name); Console.WriteLine("\nDosyalar"); Console.WriteLine("**********"); foreach (FileInfo fi in dir.getfiles()) Console.WriteLine(fi.Name);

Klasör Oluşturmak class Program static void Main(string[] args) DirectoryInfo newdir = new DirectoryInfo(@"C:\bilgisayar"); if (newdir.exists) Console.WriteLine("Bu klasör zaten var"); else newdir.create();

Dosya İşlemleri (Oluşturma, Kopyalama, Taşımak ve Silme) class Program static void Main(string[] args) File.CreateText("yenidosya.txt"); File.Copy("yenidosya.txt", "kopyadosya.txt"); File.Move("kopyadosya.txt", "gecici.txt");

class Program static void Main(string[] args) FileInfo fi = new FileInfo("yenidosya.txt"); fi.createtext(); fi.copyto("yenidosya2.txt"); FileInfo fi2 = new FileInfo("yenidosya2.txt"); fi2.moveto("yenidosya3.txt");

Metin Dosyaları (Okuma/Yazma) Metin dosyalarını okuyabilmek için TextReader veya StreamReader sınıfları kullanılır. (StreamReader, TextReader dan türemiştir.). Yazma işlemi için ise TextWriter ve StreamWriter kullanılır.

class Program static void Main(string[] args) TextReader tr = File.OpenText(@"C:\windows\win.ini"); Console.WriteLine(tr.ReadToEnd()); tr.close();

class Program static void Main(string[] args) StreamReader sr = new StreamReader(@"C:\windows\win.ini"); string input; while((input = sr.readline())!=null) Console.WriteLine(input); sr.close();

İkili Dosyalar (Binary Files) Text olmayan değerleri okuyup yazabilmek için BinaryWriter ve BinaryReader sınıfları kullanılır. (Her ikisi de bir dosya streamine ihtiyaç duyar)

class Program static void Main(string[] args) FileStream fs = new FileStream("data.bin", FileMode.Create); BinaryWriter w = new BinaryWriter(fs); for (int i = 0; i < 11; i++) w.write((int)i); w.close(); fs.close();

class Program static void Main(string[] args) FileStream fs = new FileStream("data.bin", FileMode.Open,FileAccess.Read); BinaryReader r = new BinaryReader(fs); for (int i = 0; i < 11; i++) Console.WriteLine(r.ReadInt32()); r.close(); fs.close();

String Okuma/Yazma StringWriter ve StringReader sınıfları kullanılır.

class Program static void Main(string[] args) StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); sw.write("merhaba"); sw.write("dünya"); sw.close();

class Program static void Main(string[] args) StringBuilder sb = new StringBuilder(); StringReader sr = new StringReader(sb.ToString()); sr.close();

Memory Stream class Program static void Main(string[] args) MemoryStream ms = new MemoryStream(); StreamWriter sw = new StreamWriter(ms); sw.writeline("merhaba"); sw.flush(); ms.writeto(file.create("memory.txt")); sw.close(); ms.close();

Compressed Streams GzipStream sınıfı kullanılır.

class Program static void Main(string[] args) GZipStream gzout = new GZipStream(File.Create("data.zip"), CompressionMode.Compress); StreamWriter sw = new StreamWriter(gzout); for (int i = 0; i < 1000; i++) sw.writeline("merhaba"); sw.close(); gzout.close(); GZipStream gzin = new GZipStream(File.OpenRead("data.zip"), CompressionMode.Decompress); StreamReader sr = new StreamReader(gzin); Console.WriteLine(sr.ReadToEnd()); sr.close(); gzin.close();

Kaynak Chapter 2