BG MVC Model View Controller eğitim serisi yayında...

Ana sayfa > Programlama > C Programlama > C örnek kodlar > c_ornek00028

C örnek kodlar

Tüm dosya yazma ve okuma fonksiyonlarını bir arada inceleme

Aşağıdaki program, dosyaya yazma ve okuma işlemlerinde kullanılan fputc(), fgetc(), fputs(), fgets(), fprintf(), fscanf(), fread() ve fwrite() fonksiyonlarının kullanımını gerekli hata kontrol işlemleri ile birlikte tek bir örnek üzerinde incelemektedir.


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
  FILE *fp;
  int id, csize;
  char cdizi[][40]= { "Bilgisayar", "Programlama", "Sayısal", "Sistem" };
  char gdizi[40];
  unsigned char cd;
  double dd;

  // fputc() ve fgetc() fonksiyonları
  if ((fp = fopen ("dosya.txt", "w+")) == NULL) {
      printf("Dosya açma hatası!");
      exit(1);
  }

  for (id=0; id<strlen(cdizi[0]); id++) {
       if(fputc (cdizi[0][id], fp)==EOF) {
          printf("fputc() fonksiyonu dosyaya yazma hatası!");
          fclose(fp);
          exit(1);
       }
  }

  rewind(fp);

  while (!feof(fp)) {
     id = fgetc(fp);
     if (ferror(fp)) {
         printf("Kaynak dosyadan okuma hatası!");
         fclose(fp);
         exit(1);
     }
     if (id!=EOF) printf("%c", id);
  }

  fclose(fp);

  printf("\n");

  // fputs() ve fgets() fonksiyonları
  if ((fp = fopen ("dosya.txt", "w+")) == NULL) {
      printf("Dosya açma hatası!");
      exit(1);
  }

  csize = sizeof(cdizi)/sizeof(cdizi[0]);

  for (id=0; id<csize; id++) {
       // Karakter dizisi sonundaki '\0' karakteri dosyaya yazılmaz.
       if (fputs(cdizi[id], fp)==EOF) {
           printf("fputs() fonksiyonu dosyaya yazma hatası!");
           fclose(fp);
           exit(1);
       }
  }

  rewind(fp);

  for (id=0; id<csize; id++) {
       // Okunan karakterler karakter dizisine atandıktan sonra, dizi sonuna otomatik olarak NULL bir karakter ('\0') eklenir.
       fgets(gdizi, strlen(cdizi[id])+1, fp);
       if (ferror(fp)) {
           printf("fgets() fonksiyonu dosyadan okuma hatası!");
           fclose(fp);
           exit(1);
       }
       printf("%s", gdizi);
  }
  fclose(fp);

  printf("\n");

  // fprintf() ve fscanf() fonksiyonları
  if ((fp = fopen ("dosya.txt", "w+")) == NULL) {
      printf("Dosya açma hatası!");
      exit(1);
  }

  if (fprintf (fp,"%.3f %d %s %c", 654.123, 9852, "Bilgisayar", 'A')<0) {
      printf("fprintf() fonksiyonu dosyaya yazma hatası!");
      fclose(fp);
      exit(1);
  }

  rewind(fp);

  if (fscanf (fp,"%lf%d%s %c", &dd, &id, gdizi, &cd)==EOF) {
      printf("fscanf() fonksiyonu dosyadan okuma hatası!");
      fclose(fp);
      exit(1);
  }

  printf("%.3f %d %s %c\n", dd, id, gdizi, cd);

  fclose (fp);

  // fread() ve fwrite() fonksiyonları
  if ((fp = fopen ("dosya.txt", "w+")) == NULL) {
      printf("Dosya açma hatası!");
      exit(1);
  }

  if (fwrite(cdizi[0], strlen(cdizi[0]), 1, fp) != 1) {
      printf("Dosyaya yazma hatası!\n");
      exit(1);
  }

  rewind(fp);

  // Okunan karakterler karakter dizisine atandıktan sonra, dizi sonuna otomatik olarak NULL bir karakter ('\0') eklenmez.
  if (fread(gdizi, strlen(cdizi[0]), 1, fp) != 1) {
      printf("Dosyadan okuma hatası!\n");
      exit(1);
  }

  // Okunan karakter dizisi sonuna boş karakter ekleme
  gdizi[strlen(cdizi[0])] = '\0';

  printf("%s", gdizi);

  fclose (fp);

  return 0;
}

Yukarıdaki örnekte, program aşağıdaki satırları ekrana yazar:

Bilgisayar
BilgisayarProgramlamaSayısalSistem
654.123 9852 Bilgisayar A
Bilgisayar