Sabtu, 18 Juni 2016

Membaca File dengan Bahasa C

Manajemen file adalah salah satu aspek penting yang sering diterapkan dalam pemrograman. Karena setiap program tentu membutuhkan media penyimpanan untuk menyimpan semua datanya. Oleh karena itu, setiap sistem operasi pasti menyediakan API untuk membudahkan programmer membuat programnya memanajemen file dengan mudah.



Bahasa C memiliki sebuah library, yang biasa dikenal dengan sebutan "libc". Awalnya bahasa C dikembangkan untuk lingkungan sistem operasi UNIX. Tapi seiring dengan perkembangan zaman. C menjadi bahasa wajib bagi semua sistem operasi, termasuk juga libc. Untuk menangani file, libc menyediakan banyak fungsi yang sangat mudah untuk digunakan. Biasanya operasi file selalu diawali dengan memanggil fopen() dan setelah selesai harus diakhiri dengan fungsi fclose().
fopen() : membuka atau membuat file baru.
fclose() : menutup file yang telah dibuka dengan fopen()

Ada 2 fungsi dasar yang sering digunakan untuk mengolah file, antara lain.
fread() : membaca data dari file.
fwrite() : menulis data ke file.
fseek() : Memilih offset file yang akan dibaca atau ditulis.


fopen()

FILE *fopen(const char *filename, const char *mode)

Parameter filename adalah nama file yang ingin dibuka atau dibuat. Kita dapat menentukan apakah ingin membuat file baru atau membuka file yang sudah ada, dengan memberikan argumen yang benar pada parameter mode.
Parameter mode menentukan bagaimana fopen akan bekerja. Mode yang diberikan berupa string yang berisi salah satu atau kombinasi karater berikut.

mode Deskripsi
"r" Membuka file yang sudah ada untuk menambahkan data pada file tersebut.
"w" Membuat file baru untuk keperluan menulis data. Jika nama file sudah ada, file tersebut akan dihapus dan dibuat file baru dalam keadaan kosong.
"a" Operasi penulisan data dengan fwrite akan menambahkan data yang ditulis tersebut di bagian akhir data yang sudah ditulis. Namun jika file belum ada, fopen akan membuat file kosong baru.
"r+" Membuka file untuk keperluan baca dan tulis data. File yang ditunjukkan oleh parameter filename harus ada.
"w+" Sama seperti "w", tapi kita juga bisa menulis data dengan fwrite().
"a+" Sama seperti "a", dengan tambahan bisa membaca data juga.

Setelah file dibuka atau dibuat dengan fopen() kita bisa mulai melakukan sesuatu dengannya. Fungsi fopen mengembalikan handle berupa tipe FILE*. Handle ini harus disimpan untuk operasi pembacaan dan penulisan data yang akan dilakukan.

fread()

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)

Parameter ptr adalah pointer ke memori yang digunakan sebagai buffer. Untuk membaca data kita membutuhkan buffer untuk menyimpan data hasil pembacaan data. Buffer bisa diciptakan dengan membuat array, atau dengan mengalokasikan memory dengan malloc().
Julah data yang dibaca ditentukan oleh parameter size dan nmemb. size adalah ukuran elemen yang ingin dibaca dan nmemb adalah jumlah elemennya. Jadi jumlah data yang dibaca nanti adalah sebanyak size x nmemb.
Dan terakhir, parameter stream adalah handle file yang telah dibuka dengan fopen().

fwrite()

size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream)

Tidak berbeda jauh dengan fread(). Semua parameter yang digunakan fwrite sama persis. Yang membedakan adalah bahwa parameter ptr disini menunjuk ke buffer yang berisi data yang akan ditulis ke file.

fseek()
Setelah file terbuka, pembacaan dan penulisan data dimulai dari offset 0, atau offset pertama. Ada kalanya kita ingin membaca atau menulis data mulai dari offset tertentu. Ini bisa dilakukan dengan fseek().

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

Fungsi ini akan memindahkan pointer berdasarkan argumen offset dan whence. Ada 3 jenis argumen whence, yaiu:
SEEK_SET : offset dipindah secara absolut berdasarkan argumen offset.
SEEK_CUR : offset dipindahkan relatif terhadap offset saat ini(current offset). new offset = current offset + offset
SEEK_END : offset dipindah relatif terhadap offset terakhir file.

Contoh
fread.c
#include <stdio.h>
#include <stdlib.h>

int main(){
 FILE *file;
 char buffer1[20];
 char buffer2[20];
 size_t tmp;
 
 file = fopen("data.txt","r");
 //jika file tidak ada -> errror
 if(!file){
  printf("data.txt tidak ada atau tidak bisa dibuka");
  exit(EXIT_FAILURE);
 }
 //baca data dari awal
 tmp = fread(buffer1,7,1,file);
 if (tmp == 0){
  printf("baca data gagal");
  fclose(file);
  exit(EXIT_FAILURE);
 }
 else printf("Data buffer1: %s\n",buffer1);
 
 //baca data dari offset 8
 fseek(file,8,SEEK_SET);
 tmp = fread(buffer2,6,1,file);
 if (tmp == 0){
  printf("baca data gagal");
  fclose(file);
  exit(EXIT_FAILURE);
 }
 else printf("Data buffer2: %s\n",buffer2);
}

data.txt
Belajar bahasa C

Output

Load disqus comments

0 comments