C ile Dosya İşlemleri (Ekleme,Silme,Arama,Listeleme)

Batuhan Düzgün tarafından yayınlanmıştır 10. February 2012 03:00
 
Merhaba arkadaşlar bu yazımda sizlere C diliyle dosyalama işlemleri hakkında bir uygulama hazırlayacağım. C diliyle dosya işlemleri biraz sıkıntılıdır. Buradaki sıkıntıdan kasıt programlanması ve grameridir.
 
Aşağıda geliştirilen uygulamaya dair kaynak kodlar verilmiştir. Kodlar Standart C'ye göre Dev C++ derleyicisinde hazırlanmıştır. Visual Studio ile .NET tabanlı bir projede bazı kod satırları çalışmayabilir.
 
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

// Bir kayıda ait veri yapısı
struct Person
{
       char Ad[30];
       char Soyad[30];
       char KartNo[30];
};

// Dosya işlemleriyle ilgili fonksiyon ön bildirimleri
void KayitEkle();
void KayitSil();
void KayitListele();
void KayitAra();
void Menu();

// Programın başladığı ana gövde
int main()
{
    Menu();
    getch();
    return 0;
}

// Dosya işelmerliyle ilgili menuyu ekrana yansıtan fonksiyon
void Menu()
{
     char Tercih = 'r';
     
     printf(" >>Kayit Ekle(1)<< || >>Kayit Sil(2)<< || >>Kayit Listele(3)<< \n\n\t\t >>Kayit Ara(4)<< || >>Cikis(E)<< \n");
     
     Tercih = getche();
     
     while(Tercih != 'E' || Tercih != 'e') {
          switch(Tercih)
          {
                        case '1': {KayitEkle();break;}
                        case '2': {KayitSil();break;}
                        case '3': {KayitListele();break;}
                        case '4': {KayitAra();break;}
          }
          printf("Başka işlem yapmak istiyormusunuz(E/H)?\n");
          Tercih = getche();
          if(Tercih == 'H' || Tercih == 'h') {
                    break;
          }
     }
}


// Dosyaya bir kayıt eklemeyi sağlayan fonksiyon.
void KayitEkle()
{
// Bir adet Person tipinde struct tanımlanır.
     Person *KullaniciObj;
// Malloc fonksiyonu ile hafızadan struct boyutu kadar alan ayrılır.
     KullaniciObj = (Person*) malloc(sizeof(Person));
//Dosya tanımlanır.     
     FILE *PersonDB;
     // Ekrandan kullanıcı bilgileri alınır.
     printf("Kullanici adini giriniz : \n");
     scanf("%s", &KullaniciObj->Ad);
     printf("Kullanici soyadinizi giriniz : \n");
     scanf("%s", &KullaniciObj->Soyad);
     printf("Kullanici Kartno : \n");
     scanf("%s", &KullaniciObj->KartNo);
     // Dosya "a" parametresi ki append (yani var olan kayıtları koru ve yeni bir tane daha ekle) anlamına gelir.
     PersonDB = fopen("D:\\userFile.txt","a");
     // fwrite ile dosyaya yazma işlemi gerçekleştirilmiş olur.
     fwrite(KullaniciObj, sizeof(Person) - 2*sizeof(KullaniciObj), 1, PersonDB);
     // Açık olan dosya kapatılır.
     fclose(PersonDB);
}

// Dosyadan bir kaydı silmek için hazırlanmış fonksiyondur.
void KayitSil()
{
     Person *KullaniciObj;
     char KartNoTemp[30];
       
     FILE *PersonDB;
     FILE *TempPersonDB;
     
     printf("Silmek istediginiz kisinin kart numarasini giriniz : \n");
     scanf("%s", &KartNoTemp);
     
     PersonDB = fopen("D:\\userFile.txt","r");
     TempPersonDB = fopen("D:\\TempFile.txt","a");
     
// Dosyadaki bütün kayıtlar taranır ve silinmesini istediğimiz kayıt atlanarak geçici bir dosyaya, silinecek kayıt dışındakilerin hepsi // 

yazılır.
     while(!feof(PersonDB))
     {
            KullaniciObj = (Person*) malloc(sizeof(Person));
            fread(KullaniciObj, sizeof(Person) - 2*sizeof(KullaniciObj), 1, PersonDB);
            if(KullaniciObj != NULL)
            {
                if(strcmp(KullaniciObj->KartNo, KartNoTemp))
                {
                    fwrite(KullaniciObj, sizeof(Person) - 2*sizeof(KullaniciObj), 1, TempPersonDB);    
                }
                else if(strcmp(KullaniciObj->KartNo, KartNoTemp))
                {
                    printf("Kayit silindi!\n");
                }
            }
     }
     
     fclose(PersonDB);
     fclose(TempPersonDB);
     // Dosya silinir.
     remove("D:\\userFile.txt");
     // geçici dosyanın ismi asıl dosya ismi değiştirilir.
     rename("D:\\TempFile.txt","D:\\userFile.txt");
}

// Bütün kayıtları ekrana listeler.
void KayitListele()
{
     Person *KullaniciObj;  
     FILE *PersonDB;
     
     printf("Okucam\n");
     PersonDB = fopen("D:\\userFile.txt","r");
     printf("Okudum"); 
     
     while(!feof(PersonDB))
     {
            KullaniciObj = (Person*) malloc(sizeof(Person));
            fread(KullaniciObj, sizeof(Person) - 2*sizeof(KullaniciObj), 1, PersonDB);
            
            printf(KullaniciObj->KartNo);
            
            if(KullaniciObj != NULL)
            {
                if(strcmp(KullaniciObj->KartNo, ""))
                {
                 printf("Kullanici adi : %s\n", KullaniciObj->Ad);
                 printf("Kullanici soyadi : %s\n", KullaniciObj->Soyad);
                 printf("Kullanici kartno : %s\n", KullaniciObj->KartNo);
                 printf("---------------------------\n");
                }
            }
     }
     
     fclose(PersonDB);
}

// Dosya içerisinden ilgili kaydı bulmaya yarar.
void KayitAra()
{
     Person *KullaniciObj;
     FILE *PersonDB;
     char CurrentKartNo[30];
     
     printf("Aramak istediginiz kaydin kart numarasini giriniz : \n");
     scanf("%s", &CurrentKartNo);
     
     PersonDB = fopen("D:\\userFile.txt","r");
     
     while(!feof(PersonDB))
     {
            KullaniciObj = (Person*) malloc(sizeof(Person));
            fread(KullaniciObj, sizeof(Person) - 2*sizeof(KullaniciObj), 1, PersonDB);
            
            printf(KullaniciObj->KartNo);
            if(KullaniciObj != NULL)
            {
                if(!strcmp(KullaniciObj->KartNo, CurrentKartNo))
                {
                 printf("Kullanici adi : %s\n", KullaniciObj->Ad);
                 printf("Kullanici soyadi : %s\n", KullaniciObj->Soyad);
                 printf("Kullanici kartno : %s\n", KullaniciObj->KartNo);
                }
            }
     }
     fclose(PersonDB);
}
 
Bir sonraki makalemde görüşmek dileğiyle ... 
 
Batuhan Düzgün
 
Bilgisayar Mühendisi
 
Endüstri Mühendisi 

Currently rated 4.5 by 6 people

  • Currently 4.5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Etiketler:

Qt ve C++

Comments

Add comment


(Will show your Gravatar icon)  

  Country flag

biuquote
  • Comment
  • Preview
Loading





Bu site BlogEngine.NET 1.4.5.0 ile oluşturulmuştur. Türkçe çevirisi BlogEngine TR ekibi tarafından yapılmıştır.

Batuhan Düzgün

Sakarya Üniversitesi 

Bilgisayar Mühendisi

Endüstri Mühendisi

Yeditepe Üniversitesi

Bilgisayar Mühendisliği Yüksek Lisans 

 sahibinden.com

   Kıdemli Uzman Yazılım Mühendisi  

E-Mail 

   batuhan.duzgun@sahibinden.com

   batuhan.duzgun@windowslive.com

  github.com/batux

 

Sayfalar

Calendar

<<  July 2018  >>
MoTuWeThFrSaSu
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

Yazıları geniş takvimde göster