Dosya İşlemleri

Dosya İşlemleri

Dosya Kullanımı

  • Verilerin ikincil bellekte kalıcı olarak saklandığı yapıya dosya adı verilir.
  • Örneğin aşağıda kişilerin isimleri ve numara kayıtlarını tutuğumuz bir dosyayı hard diskte veya flash diskte saklayabiliriz.
Dosyalama İşlemi

Dosyalara Erişim

  • Dosyalara erişim iki yöntemle yapılır:
                Sıralı Erişim
                Rastgele Erişim
  • Dosya işlemleri için fstream kütüphanesini aşağıdaki komutla progrma dahil etmemiz gerekir.
                 #include
  • Dosya girdi-çıktı işlemleri için üç sınıf tanımlanmıştır.
                  ifstream  → Dosya okuma
                  ofstream → Dosyaya yazma
                  fstream   → Dosyayı güncelleme

Sıralı Erişim

  • İng.Sequential Access
  • Sıralı erşim (sequential access) yöntemiyle okuma veya yazma işlemi aşağıda görüldüğü gibi dosyanın başından başlayarak sırayla yapılır.

Dosyanın içinde saklanan herhangi bir veriye erişmek için o veriye kadar olan tüm kayıtlar sırayla okunur.

Dosya Çıktı İşlemleri

  • Dosyaya veri yazdırmak için ofstream sınıfının aşığında gösterildiği şekilde kullanmamız gerekir.

Dosya Çıktı İşlemleri

Çıktı Dosyaları

  • Çıktı dosyaları aşağırdaki farklı dosya açama modları kullanılarak  açılabilir.
            ios::out : Yazma işlemi dosyanın başından başlayarak yapılır ve daha                      önceden veri girilmişse yeni veriler bu verilerin üstüne yazılır.
            ios::app : Yazma işlemi dosyanın en son verisin olduğu yerden başlayarak            yapılır ve daha önceden veri girilmişse herhangi bir veri kaybı yaşanmaz.
  • Aşağıdaki tanımda olduğu gibi eğer dosya tanımında dosya açma modu kullanmazsak, varsayılan mod ios::out olacaktır.

Dosya Açma

  • Dosya açma işlemi open() fonksiyonu kullanılarak da yapılabilir.
ofstream dosyaYaz;
dosyaYaz.open(“cikti.dat,ios::out);
  • Dosya açmada hata oluşup oluşmadığını aşağıdaki şekilde kontrol edebiliriz.
ofstream dosyaYaz (“cikti.dat, ios::out)İ;
   if (!dosyaYaz)
          cerr<<“dosya acilmadi”;
   else {…..}
  • dosyaYaz ismi eğer dosya başarılı bir şekilde açıldıysa true , açılmadıysa false değerini döndürür.
Dosya Yazma
  • Dosyayı yukarıdaki şekilde açtıktan sonra çıktılarımızı aynı cout veri yoluna yollar gibi dosya nesnesine göndermemiz gerekir.
int x=123;
string s=”AYSE”;
doyaYaz<<x<<” “<<s<<endl;

Dosya Yazma

Dosya Kapatma
  • Program bitmeden dosyayı kapatmak için close() fonksiyonu kullanılır.
                  dosyaYaz.close();
  • close() fonksiyonu işletim sisteminin dosya nesnesi ile dosya adı arasındaki ilişkiyi sonlandırmasını ve dosyayla ilgili son işlemlerin yapılmasını sağlar.
  • ifstream ve ofstream sınıflarının içinde bulunan yıkıcı fonksiyonda close() fonksiyonu otomatik olarak çağrılır.
  • Bu sebeple dosyalarınız için close() fonksiyonunu çağırmanız diğer programlama dillerinde olduğu gibi şart değildir. 
  1. #include<iostream>
  2. #include<string>
  3. #include<fstream>
  4. using namespace std;
  5. int main()
  6. {
  7. ofstream dosyayaz("fatih.txt",ios::out);
  8. int a=60,b=80,c=20;
  9. string a1="Fatih Yılmaz";
  10. string b1="Can Uygal";
  11. string c1="Berat Tan";
  12. dosyayaz<<a<<'\0'<<a1<<endl;
  13. dosyayaz<<b<<'\0'<<b1<<endl;
  14. dosyayaz<<c<<'\0'<<c1<<endl;
  15. dosyayaz.close();
  16. return 0;
  17. system(“pause”);
  18. }
Dosya Girdi İşlemleri
  • Bir dosyadan veri okumak için daha önceden içinde veri olan bir dosyanın bulunması gerekir.
  • Derleyicinin editörünü veya Word,NotePad,vs. gibi herhangi bir metin işleme yazılımını kullanıp dosyaya .txt, .doc, .dat gibi bir uzantı vererek bir metin dosyası hazırlayabiliriz. 

 

Dosya Okuma
  • Okunacak dosya programda bir nesne olarak tanımlanır.

Rastgele Erişim

  • Dosya açma modu aşağıdaki tanımda olduğu gibi yazılmazsa varsayılan mod olarak ios::in alınır.
  • Dosya açıldıktan sonra girdiler aynı cin veri yolundan okur gibi dosyaOku nesnesinden okunabilir.
string s;
int no;
dosyaOku>>s>>no;
Dosya Sonu
  • eof():
    • dosya sonu (end of file ) fonksiyonu 
    • dosyanın sonuna gelindiyse true, daha okunacak veriler varsa ise false döndürür.

 

  1. #include<iostream>
  2. #include<string>
  3. #include<fstream>
  4. using namespace std;
  5. int main()
  6. {
  7. string isim, yuksekisim,soyisim,yukseksoyisim;
  8. int not,yukseknot=0;
  9. ifstream dosyaoku("fatih.txt",ios::in);
  10. while(!dosyaoku.eof())
  11. {
  12. dosyaoku>>not>>isim>>soyisim;
  13. if(not>yukseknot)
  14. {
  15. yukseknot=not;
  16. yuksekisim=isim;
  17. yukseksoyisim=soyisim;
  18. }
  19. }
  20. cout<<"En yuksek not: "<<yuseknot;
  21. cout<<" Isım: "<<yuksekisim;
  22. cout<<" Soyisim:"<<yukseksoyisim<<endl,
  23.  
  24. return 0;
  25. system(“pause”);
  26. }
Dosya Sonuna Ekleme

Eğer dosyayı ios::app moduyla açılırsa, dosyadaki eski bilgiler silinmez ve dosyanın sonuna veriler eklenir.
Dosya Sonuna Ekleme

Rastgele Erişim
  • İng.Random access
  • Bazı durumlarda dosyanın herhangi bir yerindeki bilgi doğrudan okunmak istenebilir
  • Bazı durumlarda rastgele erişim yöntemi kullanılır.
  • Rastgele erişim için aşağıda görüldüğü gibi fstream tipinde nesne yaratılır.
  • dosya1 yazma ve okuma olmak üzere iki mod’da açılmıştır. dosya1 üzerinden hem okuma hemde yazma işlemi yapılır.

Dosya Rastgele Erişim

  • seekp():dosyanın herhangi bir yerine gitmek için kullanılır.
/*     Örnek     */
dosya1.seekp(500);
 
dosya1>>x;           // dosyanın 500. byte’ında yer alan değeri okur
10 Kişilk Bir Sınıf Sıralamasını Yapan Program
  • Öğrenci isim, soyisim, numara ve not’tan oluşan 10 kişilik bir sınıf için isme göre sıralama (isim aynı ise soyisimler sıralanacaktır) yapan bir program yazınız.
  • İzlenilecek yol; sınıf verileri ilk önce dosya1.txt isimli bir dosyaya numara, isim , soyisim ve not sırası şeklinde kayıt edilecektir. Veriler ise dosyadan, oluşturulacak bir yapıya aktarılacaktır.
  • Sıralama olayı alt programda pointer yardımıyla yapılacaktır. Sıralanmış sınıf, dosya2.txt dosyasına kayıt edilecektir.
  1. #include<iostream>
  2. #include<string>
  3. #include<fstream>
  4. using namespace std ;
  5.  
  6. void siralama(struct sinif *ogr );
  7. struct sinif
  8. {
  9. string isim ;
  10. string soyisim;
  11. int numara,puan;
  12. };
  13. int main()
  14. {
  15. ofstream dosyayaz(“sinif.txt”,ios::out) ;
  16. struct sinif a[100] ;
  17. cout<<“Ogrencilerin Verilerini Giriniz”<<endl;
  18. for(int i=0;i<10;i++)
  19. {
  20. cout<<i+1<<“.ogrenci<<endl<<” \tIsim =<<“\t”;
  21. cin>>a[i].isim ;
  22. cout<<“\tSoyismi =;
  23. cin>>a[i].soyisim ;
  24. cout<<“\tNumarasi=;
  25. cin>>a[i].numara ;
  26. cout<<“\tNotu =;
  27. cin>>a[i].puan ;
  28. }
  29. cout<<“Numara\t\t\t”<<“Isim\t\t\t”<<“Soyisim\t\t\t”<<“Not”<<endl;
  30. dosyayaz<<“Numara\t\t\t”<<“Isim\t\t\t”<<“Soyisim\t\t\t”<<“Not”<<endl;
  31. for(int i=0;i<10;i++)
  32. {
  33. cout<<a[i].numara;
  34. cout<<“\t\t\t”<<a[i].isim;
  35. cout<<“\t\t\t”<<a[i].soyisim;
  36. cout<<“\t\t\t”<<a[i].puan<<endl;
  37. dosyayaz<<a[i].numara;
  38. dosyayaz<<“\t\t\t”<<a[i].isim;
  39. dosyayaz<<“\t\t\t”<<a[i].soyisim;
  40. dosyayaz<<“\t\t\t”<<a[i].puan<<endl;
  41. }
  42. dosyayaz.close() ;
  43. siralama(&a[0]);
  44. system(“pause”) ;
  45. return 0 ;
  46. }
  47. void siralama(struct sinif *ogr )
  48. {
  49. ofstream dosyayaz(“sirali.txt”,ios::out) ;
  50. cout<<“Numara\t\t\t”<<“Isim\t\t\t”<<“Soyisim\t\t\t”<<“Not”<<endl;
  51. dosyayaz<<“Numara\t\t\t”<<“Isim\t\t\t”<<“Soyisim\t\t\t”<<“Not”<<endl;
  52. for(int i=0;i<10;i++)
  53. {
  54. for(int j=1;j<4;j++)
  55. {
  56. if((*(ogr+i)).isim<((*(ogr+j)).isim))
  57. {
  58. cout<<(*(ogr+j)).numara;
  59. cout<<“\t\t\t”<<(*(ogr+j)).isim;
  60. cout<<“\t\t\t”<<(*(ogr+j)).soyisim;
  61. cout<<“\t\t\t”<<(*(ogr+j)).puan<<endl;
  62. dosyayaz<<(*(ogr+j)).numara;
  63. dosyayaz<<“\t\t\t”<<(*(ogr+j)).isim;
  64. dosyayaz<<“\t\t\t”<<(*(ogr+j)).soyisim;
  65. dosyayaz<<“\t\t\t”<<(*(ogr+j)).puan<<endl;
  66.  
  67. }
  68. }
  69. }
  70. }

Kimler Neler Demiş?

  Abone ol  
Bildir