author Ahmad Muhardian

Belajar Pemrograman C #17: Cara Membaca dan Menulis File di C


Cara Baca tulis file pada pemrograman C

Apa yang akan terjadi bila program ditutup?

Yap! semua data yang tersimpan di variabel akan hilang.

Memanfaatkan variabel saja tidak akan cukup untuk menyimpan data. Karena itu, kita membutuhkan media penyimpanan lain seperti File.

Dengan demikian, kita akan tetap memiliki data, meskipun programnya sudah ditutup.

Filenya juga bisa kita kirim ke komputer lain dan dibuka dari sana.

Nah, pada tutorial kali ini.. Kita akan belajar cara membaca dan menulis data ke file dengan bahasa C.

Mari kita mulai…

Membaca File dengan Program C

Sebelum kita mulai, saya ingin kasih tahu:

“File di komputer itu ada dua jenis, yakni file teks dan binary.”

File teks biasanya dibuat dengan teks editor, contohnya seperti: file txt, file csv, file html, dll.

File teks mudah dibaca dan ditulis.

Sedangkan file binary adalah file yang tersimpan dalam bentuk biner (0 & 1). Contohnya seperti: File exe dan file bin.

File binary sulit dibaca, namun dapat menyimpan data lebih banyak dan aman.

Oke lanjut…

Berikut ini adalah fungsi untuk membuka atau membaca file di C:

Fungsi untuk membaca file

Fungsi fopen() akan membuka file sesuai dengan mode yang kita berikan.

Mode r artinya read atau baca saja. Selain mode r ada juga mode yang lain.

Berikut ini daftar lengkap modenya:

ModeArtiJika File Tidak ada
rBuka untuk dibacareturn NULL.
rbBuka untuk dibaca dalam binary.return NULL.
wBuka untuk ditulisBuat baru atau tulis ulang jika ada
wbBuka untuk ditulis dalam binaryBuat baru atau tulis ulang jika ada
aBuka untuk ditambahkanBuat baru atau tulis ulang jika ada
abBuka untuk ditambahkan dalam binaryBuat baru atau tulis ulang jika ada
r+Buka untuk dibaca dan ditulisreturns NULL.
rb+Buka untuk dibaca dan ditulis dalam binaryreturns NULL.
w+Buka untuk ditulis dan dibacaBuat baru atau tulis ulang jika ada
wb+Buka untuk dibaca dan ditulis dalam binaryBuat baru atau tulis ulang jika ada
a+Buka untuk dibaca dan ditambahkan isinyaBuat baru atau tulis ulang jika ada
ab+Buka untuk dibaca dan ditambahkan isinya dalam binaryBuat baru atau tulis ulang jika ada

Fungsi fopen() akan menghasilkan sebuah pointer yang menunjuk ke alamat memori dari file yang akan dibuka, karena itulah kita membutuhkan pointer untuk mengaksesnya.

// membuat pointer
File *fptr;

// membuka file
fptr = fopen("namafile.txt", "r");

Oke sekarang mari kita coba untuk membaca file saja..

Buatlah program baru bernama baca_file.c, kemudian isi dengan kode berikut:

#include <stdio.h>

void main()
{
  char buff[255];
  FILE *fptr;

  // membuka file
  if ((fptr = fopen("puisi.txt","r")) == NULL){
      printf("Error: File tidak ada!");
      // Tutup program karena file gak ada.
      exit(1);
  }

  // baca isi file dengan gets lalu simpan ke buff
  fgets(buff, 255, fptr);
  // tampilkan isi file
  printf("%s", buff);

  // tutup file
  fclose(fptr);
}

Setelah itu, coba jalankan programnya.

Menjalankan program baca file

Hasilnya akan error, karena program tidak menemukan file yang akan dibuka.

Nah sekarang coba buat file puisi.txt dengan isi sebagai berikut:

Ini adalah puisi untuk kamu
tapi isinya gak jelas

Ah yang penting file ini
ada isinya.

Cuma buat ngetes aja sih.

Simpan file ini satu direktori dengan programnya.

Lokasi simpan file puisi.txt

Setelah itu, coba jalankan lagi programnya.

Maka hasilnya:

Program membaca file di C

Isi file akan dibaca satu baris karena kita menggunakan fungsi fgets().

fgets(buff, 255, fptr);

Fungsi fgets() akan membaca isi file yang ditunjuk oleh pointer fptr, kemudian hasilnya akan disimpan ke dalam variabel buff.

Fungsi fgets() hanya akan membaca satu baris saja. Anka 255 adalah panjang baris (karakter) yang akan dibaca.

Jika kita ubah menjadi seperti ini:

fgets(buff, 20, fptr);

Maka hasil outputnya:

Ini adalah puisi un

Panjang karakter ini, bisa juga kita ambil dengan fungsi sizeof() agar mengikuti panjang karakter dari variabelnya.

Contoh:

sizeof(buff);

Lalu bagaimana cara membaca semua baris teks yang ada di dalam file?

Gampang!

Kita tinggal panggil fungsi fgets() berkali-kali.

Sekarang coba ubah kode programnya menjadi seperti ini:

#include <stdio.h>

void main()
{
    char buff[255];
    FILE *fptr;

    // membuka file
    if ((fptr = fopen("puisi.txt","r")) == NULL){
        printf("Error: File tidak ada!");
        // Tutup program karena file gak ada.
        exit(1);
    }

    // baca isi file dengan gets lalu simpan ke buff
    fgets(buff, sizeof(buff), fptr);
    printf("%s", buff);
    fgets(buff, sizeof(buff), fptr);
    printf("%s", buff);
    fgets(buff, sizeof(buff), fptr);
    printf("%s", buff);
    fgets(buff, sizeof(buff), fptr);
    printf("%s", buff);

    // tutup file
    fclose(fptr);
}

Hasilnya:

Program membaca file di C

Program akan membaca empat baris dari isi file, ini karena kita memanggil fungsi fgets() sebanyak empat kali.

Tapi masalahnya nanti:

“Gimana kalau isi filenya ada banyak, misal 1000 baris?”

“Kita gak mungkin kan harus mengetik perintah itu berulang-ulang”

Benar sekali…

Ini bisa kita atasi dengan perulangan. Contohnya seperti ini:

#include <stdio.h>

void main()
{
    char buff[255];
    FILE *fptr;

    // membuka file
    if ((fptr = fopen("puisi.txt","r")) == NULL){
        printf("Error: File tidak ada!");
        // Tutup program karena file gak ada.
        exit(1);
    }

    // baca isi file dengan gets lalu simpan ke buff
    while(fgets(buff, sizeof(buff), fptr)){
        printf("%s", buff);
    }

    // tutup file
    fclose(fptr);
}

Maka hasilnya:

Program membaca file di C

Semua isi file akan dibaca. Ini karena kita memanggil fungsi fgets() di dalam perulangan while.

Perulangan while akan berhenti saat fgets() menghasilkan null atau sudah tidak ada lagi baris yang dibaca.

Paham kan?

Selanjutnya kita akan mencoba:

Jika fungsi fgets() digunakan untuk membaca file, nah untuk menulisnya kita butuh fungsi fputs().

Fungsi fputs()

Fungsi fputs() akan menulis teks ke dalam file yang sedang dibuka.

Mari kita coba dalam program.

Buatlah program baru dengan nama tulis_file.c, kemudian isi dengan kode berikut:

#include <stdio.h>

void main()
{
    char buff[255];
    char text[255];
    FILE *fptr;

    // membuka file
    fptr = fopen("puisi.txt","w");

    // mengambil input dari user
    printf("Inputkan isi file: ");
    fgets(text, sizeof(text), stdin);

    // menulis ke text ke file
    fputs(text, fptr);

    printf("File berhasil ditulis\n");

    // tutup file
    fclose(fptr);
}

Hasilnya:

Menulis data ke file dengan C

Maka sekarang isi file puisi.txt akan seperti ini:

Menulis data ke file dengan C

Perhatikan!

Jika kamu membuka file untuk ditulis, maka mode yang digunakan adalah w atau w+, a. Silakan cek kembali tabel mode di atas.

Kalau salah pakai mode gimana?

Ya filenya tidak akan bisa ditulis.

Lalu, gimana cara menulis dan sekaligus menampilkan isi file?

Caranya, kita harus membuka ulang filenya dengan mode yang berbeda-beda.

Contoh:

#include <stdio.h>

void main()
{
    char buff[255];
    char text[255];
    FILE *fptr;

    // membuka file untuk ditulis
    fptr = fopen("puisi.txt","w");

    // mengambil input dari user
    printf("Inputkan isi file: ");
    fgets(text, sizeof(text), stdin);

    // menulis ke text ke file
    fputs(text, fptr);

    printf("File berhasil ditulis\n");

    // tutup file setelah ditulis
    fclose(fptr);

    // buka kembali file untuk dibaca
    fptr = fopen("puisi.txt","r");

    // baca isi file dengan gets lalu simpan ke buff
    while(fgets(buff, sizeof(buff), fptr)){
        printf("Isi filenya sekarang: %s", buff);
    }

    // tutup file
    fclose(fptr);
}

Maka hasilnya:

Hasil menulis dan membaca file

Gampang kan?

Oh iya, kita hanya baru menulis dalam satu baris saja. Lalu gimana kalau mau menulis banyak baris?

Gampang, kita hanya tinggal memanggil fungsi fputs() berkali-kali.

Contoh:

#include <stdio.h>

void main()
{
    char buff[255];
    char text[255];
    FILE *fptr;

    // membuka file untuk ditulis
    fptr = fopen("puisi.txt","w");

    for(int i = 0; i < 5; i++){

        // mengambil input dari user
        printf("Isi baris ke-%d: ", i);
        fgets(text, sizeof(text), stdin);

        // menulis ke text ke file
        fputs(text, fptr);
    }

    printf("File berhasil ditulis\n");

    // tutup file setelah ditulis
    fclose(fptr);

    // buka kembali file untuk dibaca
    fptr = fopen("puisi.txt","r");

    // baca isi file dengan gets lalu simpan ke buff
    while(fgets(buff, sizeof(buff), fptr)){
        printf("Isi filenya sekarang: %s", buff);
    }

    // tutup file
    fclose(fptr);
}

Maka hasilnya:

Menulis data ke dalam file

Apa Selanjutnya?

Kita sudah belajar membaca dan menulis file dengan bahasa C. Fungsi-fungsi yang perlu diingat adalah fopen(), fget(), dan fputs().

Sebenarnya masih ada lagi fungsi lain untuk membaca dan menulis file seperti scanf(), fwrite(), fread(), dll. Namun, menurut saya fungsi-fungsi fopen(), fget(), dan fputs() lebih mudah dipakai.

Selanjutnya silakan terapkan contoh-contoh ini ke dalam program yang sedang kamu buat.

Jika ada kesulitan, bisa tanyakan di kolom komentar.

📖 Untuk tutorial C lainnya, silakan cek di List Tutorial C