Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Bahasa C

C Penanganan Berkas

Penanganan Berkas C

Dalam tutorial ini, Anda akan belajar tentang penanganan file di C. Anda akan belajar menangani I/O standar di C menggunakan fprintf(), fscanf(), fread(), fwrite(), fseek() dll. dengan bantuan contoh.

File adalah wadah di perangkat penyimpanan komputer yang digunakan untuk menyimpan data.


Mengapa file diperlukan?


Jenis File

Saat berurusan dengan file, ada dua jenis file yang harus Anda ketahui:

  1. File teks
  2. File biner

1. File teks

File teks adalah .txt biasa file. Anda dapat dengan mudah membuat file teks menggunakan editor teks sederhana seperti Notepad.

Saat Anda membuka file tersebut, Anda akan melihat semua konten di dalam file sebagai teks biasa. Anda dapat dengan mudah mengedit atau menghapus konten.

Mereka membutuhkan upaya minimal untuk pemeliharaan, mudah dibaca, dan memberikan keamanan paling sedikit dan membutuhkan ruang penyimpanan yang lebih besar.

2. File biner

File biner sebagian besar adalah .bin file di komputer Anda.

Alih-alih menyimpan data dalam teks biasa, mereka menyimpannya dalam bentuk biner (0 dan 1).

Mereka dapat menyimpan jumlah data yang lebih tinggi, tidak mudah dibaca, dan memberikan keamanan yang lebih baik daripada file teks.


Operasi File

Di C, Anda dapat melakukan empat operasi utama pada file, baik teks maupun biner:

  1. Membuat file baru
  2. Membuka file yang ada
  3. Menutup file
  4. Membaca dari dan menulis informasi ke file

Bekerja dengan file

Saat bekerja dengan file, Anda perlu mendeklarasikan pointer tipe file. Deklarasi ini diperlukan untuk komunikasi antara file dan program.

FILE *fptr;

Membuka file - untuk membuat dan mengedit

Membuka file dilakukan dengan menggunakan fopen() fungsi yang didefinisikan dalam stdio.h file header.

Sintaks untuk membuka file dalam I/O standar adalah:

ptr = fopen("fileopen","mode");

Misalnya,

fopen("E:\\cprogram\\newprogram.txt","w");

fopen("E:\\cprogram\\oldprogram.bin","rb");
Mode Pembukaan di I/O Standar
Mode Arti Modus Selama Tidak Ada File
r Terbuka untuk membaca. Jika file tidak ada, fopen() mengembalikan NULL.
rb Buka untuk membaca dalam mode biner. Jika file tidak ada, fopen() mengembalikan NULL.
w Terbuka untuk menulis. Jika file ada, isinya akan ditimpa.
Jika file tidak ada, itu akan dibuat.
wb Buka untuk menulis dalam mode biner. Jika file ada, isinya akan ditimpa.
Jika file tidak ada, itu akan dibuat.
a Buka untuk menambahkan.
Data ditambahkan ke akhir file.
Jika file tidak ada, itu akan dibuat.
ab Buka untuk menambahkan dalam mode biner.
Data ditambahkan ke akhir file.
Jika file tidak ada, itu akan dibuat.
r+ Terbuka untuk membaca dan menulis. Jika file tidak ada, fopen() mengembalikan NULL.
rb+ Terbuka untuk membaca dan menulis dalam mode biner. Jika file tidak ada, fopen() mengembalikan NULL.
w+ Terbuka untuk membaca dan menulis. Jika file ada, isinya akan ditimpa.
Jika file tidak ada, itu akan dibuat.
wb+ Terbuka untuk membaca dan menulis dalam mode biner. Jika file ada, isinya akan ditimpa.
Jika file tidak ada, itu akan dibuat.
a+ Terbuka untuk membaca dan menambahkan. Jika file tidak ada, itu akan dibuat.
ab+ Terbuka untuk membaca dan menambahkan dalam mode biner. Jika file tidak ada, itu akan dibuat.

Menutup File

File (teks dan biner) harus ditutup setelah membaca/menulis.

Menutup file dilakukan dengan menggunakan fclose() fungsi.

fclose(fptr);

Di sini, fptr adalah penunjuk file yang terkait dengan file yang akan ditutup.


Membaca dan menulis ke file teks

Untuk membaca dan menulis ke file teks, kami menggunakan fungsi fprintf() dan fscanf().

Itu hanyalah versi file printf() dan scanf() . Satu-satunya perbedaan adalah fprintf() dan fscanf() mengharapkan pointer ke struktur FILE.


Contoh 1:Menulis ke file teks

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

int main()
{
   int num;
   FILE *fptr;

   // use appropriate location if you are using MacOS or Linux
   fptr = fopen("C:\\program.txt","w");

   if(fptr == NULL)
   {
      printf("Error!");   
      exit(1);             
   }

   printf("Enter num: ");
   scanf("%d",&num);

   fprintf(fptr,"%d",num);
   fclose(fptr);

   return 0;
}

Program ini mengambil nomor dari pengguna dan menyimpannya dalam file program.txt .

Setelah Anda mengkompilasi dan menjalankan program ini, Anda dapat melihat file teks program.txt dibuat di drive C komputer Anda. Saat Anda membuka file, Anda dapat melihat bilangan bulat yang Anda masukkan.


Contoh 2:Membaca dari file teks

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

int main()
{
   int num;
   FILE *fptr;

   if ((fptr = fopen("C:\\program.txt","r")) == NULL){
       printf("Error! opening file");

       // Program exits if the file pointer returns NULL.
       exit(1);
   }

   fscanf(fptr,"%d", &num);

   printf("Value of n=%d", num);
   fclose(fptr); 
  
   return 0;
}

Program ini membaca bilangan bulat yang ada di program.txt file dan mencetaknya ke layar.

Jika Anda berhasil membuat file dari Contoh 1 , menjalankan program ini akan memberi Anda bilangan bulat yang Anda masukkan.

Fungsi lain seperti fgetchar() , fputc() dll. dapat digunakan dengan cara yang serupa.


Membaca dan menulis ke file biner

Fungsi fread() dan fwrite() digunakan untuk membaca dari dan menulis ke file pada disk masing-masing dalam kasus file biner.


Menulis ke file biner

Untuk menulis ke dalam file biner, Anda perlu menggunakan fwrite() fungsi. Fungsi mengambil empat argumen:

  1. alamat data yang akan ditulis dalam disk
  2. ukuran data yang akan ditulis dalam disk
  3. jumlah jenis data tersebut
  4. arahkan ke file tempat Anda ingin menulis.
fwrite(addressData, sizeData, numbersData, pointerToFile);

Contoh 3:Menulis ke file biner menggunakan fwrite()

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

struct threeNum
{
   int n1, n2, n3;
};

int main()
{
   int n;
   struct threeNum num;
   FILE *fptr;

   if ((fptr = fopen("C:\\program.bin","wb")) == NULL){
       printf("Error! opening file");

       // Program exits if the file pointer returns NULL.
       exit(1);
   }

   for(n = 1; n < 5; ++n)
   {
      num.n1 = n;
      num.n2 = 5*n;
      num.n3 = 5*n + 1;
      fwrite(&num, sizeof(struct threeNum), 1, fptr); 
   }
   fclose(fptr); 
  
   return 0;
}

Dalam program ini, kami membuat file baru program.bin di drive C.

Kami mendeklarasikan struktur threeNum dengan tiga angka - n1, n2 dan n3 , dan mendefinisikannya dalam fungsi utama sebagai num.

Sekarang, di dalam for loop, kita menyimpan nilainya ke dalam file menggunakan fwrite() .

Parameter pertama mengambil alamat num dan parameter kedua mengambil ukuran struktur threeNum .

Karena kita hanya memasukkan satu contoh num , parameter ketiga adalah 1 . Dan, parameter terakhir *fptr menunjuk ke file tempat kita menyimpan data.

Terakhir, kami menutup file.


Membaca dari file biner

Fungsi fread() juga ambil 4 argumen yang mirip dengan fwrite() fungsi seperti di atas.

fread(addressData, sizeData, numbersData, pointerToFile);

Contoh 4:Membaca dari file biner menggunakan fread()

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

struct threeNum
{
   int n1, n2, n3;
};

int main()
{
   int n;
   struct threeNum num;
   FILE *fptr;

   if ((fptr = fopen("C:\\program.bin","rb")) == NULL){
       printf("Error! opening file");

       // Program exits if the file pointer returns NULL.
       exit(1);
   }

   for(n = 1; n < 5; ++n)
   {
      fread(&num, sizeof(struct threeNum), 1, fptr); 
      printf("n1: %d\tn2: %d\tn3: %d\n", num.n1, num.n2, num.n3);
   }
   fclose(fptr); 
  
   return 0;
}

Dalam program ini, Anda membaca file yang sama program.bin dan ulangi catatan satu per satu.

Secara sederhana, Anda membaca satu threeNum catatan threeNum ukuran dari file yang ditunjuk oleh *fptr ke dalam struktur num .

Anda akan mendapatkan catatan yang sama dengan yang Anda sisipkan di Contoh 3 .


Mendapatkan data menggunakan fseek()

Jika Anda memiliki banyak record di dalam file dan perlu mengakses record pada posisi tertentu, Anda perlu mengulang semua record sebelum mendapatkan record.

Ini akan membuang banyak memori dan waktu operasi. Cara yang lebih mudah untuk mendapatkan data yang diperlukan dapat dicapai dengan menggunakan fseek() .

Seperti namanya, fseek() mencari kursor ke record yang diberikan dalam file.


Sintaks fseek()

fseek(FILE * stream, long int offset, int whence);

Aliran parameter pertama adalah penunjuk ke file. Parameter kedua adalah posisi record yang akan ditemukan, dan parameter ketiga menentukan lokasi di mana offset dimulai.

Berbeda dari mana dalam fseek()
Dari mana Artinya
SEEK_SET Memulai offset dari awal file.
SEEK_END Memulai offset dari akhir file.
SEEK_CUR Memulai offset dari lokasi kursor saat ini dalam file.

Contoh 5:fseek()

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

struct threeNum
{
   int n1, n2, n3;
};

int main()
{
   int n;
   struct threeNum num;
   FILE *fptr;

   if ((fptr = fopen("C:\\program.bin","rb")) == NULL){
       printf("Error! opening file");

       // Program exits if the file pointer returns NULL.
       exit(1);
   }
   
   // Moves the cursor to the end of the file
   fseek(fptr, -sizeof(struct threeNum), SEEK_END);

   for(n = 1; n < 5; ++n)
   {
      fread(&num, sizeof(struct threeNum), 1, fptr); 
      printf("n1: %d\tn2: %d\tn3: %d\n", num.n1, num.n2, num.n3);
      fseek(fptr, -2*sizeof(struct threeNum), SEEK_CUR);
   }
   fclose(fptr); 
  
   return 0;
}

Program ini akan mulai membaca record dari file program.bin dalam urutan terbalik (terakhir ke pertama) dan mencetaknya.


Bahasa C

  1. Kelas File Java
  2. Pengantar File STL
  3. Operasi File IO Verilog
  4. C - File I/O
  5. C - File Header
  6. C - Penanganan Kesalahan
  7. File dan Aliran C++
  8. Penanganan Sinyal C++
  9. C# - Penanganan Pengecualian
  10. C# - File I/O