File Handling

File bisa diproses dengan menggunakan stream dalam bahasa C++. Stream adalah abstraksi yang mewakili perangkat input dan output. Stream umumnya dikaitkan dengan sumber atau tujuan fisik berupa hardware seperti keyboard, layar komputer, hardisk, dll. 

Stream input dan output standar bisa diakses dengan header <iostream> yang sudah sering kalian gunakan. Selain itu, ada header <istream> yang hanya digunakan untuk stream input standar. Ada juga <ostream> yang digunakan untuk stream output standar. Selain stream standar, C++ juga menyediakan <sstream> untuk mengolah string sebagai stream.

Kali ini saya hanya akan membahas stream untuk file yang bisa diakses dengan header <fstream>.

Menulis File

Contoh berikut ini menggunakan ofstream untuk menuliskan isi string ke dalam file.

#include <fstream>
#include <iostream>

using namespace std;
 
int main () {
   char dataku[100];

   ofstream fileku;
   fileku.open("berkas.txt");
cout << "Masukkan nama: "; cin.getline(dataku, 100); fileku << dataku << endl;
cout << "Alamat: "; cin >> dataku; fileku << dataku << endl;
fileku.close();
return 0; }

Sebelum kode program dicompile dan dieksekusi, simpan dulu file kode program ataupun projectnya.

Kode program mencetak string yang diberikan pengguna ke dalam file dengan menggunakan variabel bertipe ofstream dan operator "<<". Kalian perlu mendeklarasikan variabelnya sebelum bisa menggunakannya. Variabel tersebut berfungsi sebagai file handler yang diperlukan untuk membuka, menulis, dan menutup file.

File juga perlu dibuka dengan method open yang dimiliki objek ofstream. Saat kalian membuka file dengan open, kalian bisa menentukan nama file yang akan digunakan. Setelah file selesai digunakan, kalian perlu menggunakan method close untuk menutup file.

File akan dibuat jika file belum ada. Jika sudah ada, isi file akan ditimpa.


Contoh di atas menyimpan data sebanyak dua baris ke dalam file "berkas.txt". File akan dibuat di tempat yang sama dengan program jika program dibuka dengan double click. Jika program dijalankan lewat IDE, file akan dibuat di tempat yang sama dengan file project atau kodenya.


Membaca Isi File

Isi file yang sudah ada bisa dibaca dengan menggunakan variabel bertipe ifstream dan operator "<<". Contohnya bisa kalian lihat pada contoh di bawah ini.
#include <fstream>
#include <iostream>

using namespace std;
 
int main () {
   char dataku[100];

   ifstream fileku;
   fileku.open("berkas.txt");

   if(fileku.is_open()){
       fileku >> dataku;
       cout <<"Baris pertama: " << dataku << endl;
       if(!fileku.eof())fileku >> dataku;
       cout <<"Baris kedua: " << dataku << endl;

       fileku.close();
   }

   return 0;
}

Kalian harus memastikan file bisa diakses dengan if dan method is_open(). Selain itu, kalian juga perlu mengecek akhir file dengan method eof jika kalian akan membaca lebih dari satu baris. Seperti saat menggunakan ofstream, kalian perlu membuka dan menutup filenya dengan open dan close.

Method Lainnya

Beberapa method seperti open, is_open, eof, dan close sudah saya gunakan di atas. Method-method tersebut adalah method yang dimiliki ifstream maupun ofstream. Selain itu, kalian juga bisa menggunakannya pada objek fstream.

Jika ingin hak untuk menulis dan membaca file sekaligus, kalian bisa menggunakan objek fstream. Fstream memiliki semua method yang dimiliki ifstream dan ofstream, termasuk yang belum saya gunakan pada contoh di atas.

  1. get : membaca satu karakter dari file
  2. getline : membaca satu baris dari file
  3. read : membaca beberapa byte data dari file
  4. ignore : membersihkan buffer stream input
  5. tellg : mengembalikan posisi atau pointer file yang digunakan method get.
  6. seekg : memindahkan posisi atau pointer file yang digunakan method get.
  7. put : menulis satu karakter ke file
  8. write : menulis beberapa byte data ke file.
  9. flush : membersihkan buffer stream output
  10. tellp : mengembalikan posisi atau pointer yang digunakan method put.
  11. seekp : memindahkan posisi atau pointer yang digunakan method get.
Kalian bisa menggunakan method get, getline, read, ignore, tellg, dan seekg pada objek ofstream dan fstream. Method lainnya bisa kalian gunakan pada objek ifstream dan fstream.
#include <fstream>
#include <iostream>

using namespace std;
 
int main () {
   char dataku[]={2, 6, 10, 16, 24, 34, 46, 60};   char data_baru[100];
   int ukuran_data=sizeof(dataku);

   fstream fileku;
   fileku.open("berkas.data", fstream::out | fstream::binary);
   if(fileku.is_open()){
       cout << "menulis ke file ..." << endl;
       fileku.write(dataku, ukuran_data/2);
       fileku.put(0);
       fileku.write(dataku, ukuran_data/2);
   }
   fileku.close();
   
   fileku.open("berkas.data", fstream::in | fstream::binary);
   if(fileku.is_open()){
       cout << "membaca dari file ..." << endl;
       fileku.read(data_baru, ukuran_data);
       data_baru[ukuran_data+1]=fileku.get();
   }
   cout << endl << "data baru : ";
   for (int i =0;i<ukuran_data;i++)
       cout << int(dataku[i]) << " ";
   cout << endl << "data baru : ";
   for (int i =0;i<ukuran_data;i++)
       cout << int(data_baru[i]) << " ";

   fileku.close();

   return 0;
}
Saat kalian menggunakan objek fstream, kalian perlu memberitahukan mode yang digunakan pada argumen kedua dari method open. Ada beberapa mode yang bisa kalian gunakan untuk pada file yang kalian buka.
  • fstream::write : menulis file
  • fstream::read : membaca file
  • fstream::app : menambah isi file.
  • fstream::binary : menggunakan metode pembacaan data biner. Jika tidak menggunakan ini, file akan dianggap file teks.
Jika kalian menggunakan beberapa mode, kalian bisa menggunakan operator (|).