File & Stream Kegunaan File : Untuk melakukan proses file I/O, diperlukan file header fstream.h didalam program. Didalam file ini didefinisikan beberapa class/object yang berhubungan dengan pemrosesan file, misalkan class ifstream, ofstream, fstream, object tersebut diturunkan dari class istream dan ostream. ( File fstream.h secara otomatis akan mengincludekan file iostream.h) Membuat Stream dan keterhubungan stream dengan file : Jika mendeklarasikan suatu stream, kita dapat menghubungkan stream tersebut dengan file, proses ini berhubungan dengan operasi terhadap file. Operasi yang dapat dilakukan terhadap file yaitu input, output dan I/O ( Input / Output). Tiga buah proses utama di dalam mengelola file adalah : 1. Membuka File 2. Melakukan proses terhadap file 3. Menutup file TPT- 2 1 Sebelum membuka file kita harus mengetahui lebih dahulu dalam keadaan mode apa file yang akan kita buka : 1. Untuk membuka file dengan tujuan output kita harus mendeklarasikan stream pada class ofstream 2. Untuk membuka file dengan tujuan input kita harus mendeklarasikan stream pada class ifstream 3. Sedangkan jika kita ingin membuka file tersebut dalam keadaan input maupun output anda harus mendeklarasikan stream pada class fstream. Contoh : ifstream fin; /* membuka file dengan nama stream fin sebagai input */ ofstream fout; /* membuka file dengan nama stream fout sebagai output */ fstream fio; /* membuka file dengan nama stream fio sebagai I/O */ Fungsi open () digunakan untuk membuka file. Bentuk umum fungsi ini adalah : void open(char*file_name,int mode, int access); Dengan menggunakan fungsi open () anda menghubungkan stream tersebut dengan file yang bernama file_Name, nilai dari variabel mode akan menentukan bagaimana keadaan file jika dibuka. Nilai variabel mode yaitu : TPT- 2 2 ios::app ios::ate ios::in ios::nocreate ios::noreplace ios::out ios::trunc Penjelasan dan fungsi dari masing-masing mode tersebut adalah : ~ ios::app = semua informasi yang ditulis ke dalam file (output) akan ditambahkan di bagian akhir file tersebut. ~ ios::ate = file akan dibuka dengan pointer file menunjuk pada akhir file ~ ios::in = file akan dibuka sebagai input ~ ios::out = file akan dibuka sebagai output ~ ios::nocreate = akan mengakibatkan kesalahan jika file tidak ada ~ ios::noreplace = file yang dibuka tidak dapat diganti, atau mengakibatkan kesalahan jika file yang akan dibuka sudah ada. ~ ios::trunc = menyebabkan isi dari file yang sudah ada akan hilang Untuk menutup file yang telah dibuka dapat digunakan fungsi : close () TPT- 2 3 Bentuk Umum fungsi ini adalah : void close (); contoh penggunaan fungsi close() adalah : fout.close(); fin.close(); fio.close(); Didalam class ios terdapat pendefinisian fungsi : int eof(); Fungsi eof () digunakan untuk menentukan apakah pointer pada file telah mencapai akhir dari file tersebut. Penelusuran kesalahan perintah dalam file : dengan perintah - Didalam class ios didefinisikan empat buah fungsi untuk melakukan tes terhadap error yang terjadi di dalam stream. Fungsi tersebut adalah : int good (); int eof(); int bad(); int fail(); Keempat fungsi tersebut akan menghasilkan nilai NOL jika kondisi tersebut salah dan nilai bukan NOL jika kondisi tersebut benar. TPT- 2 4 Jika error terjadi maka stream tersebut harus dibersihkan dahulu dari kesalahan sebelum melanjutkan ke proses berikutnya. Fungsi yang digunakan untuk membersihkan kesalahan pada stream jika terjadi kesalahan adalah fungsi clear(). Bentuk umum fungsi ini adalah : void clear (int flags = 0); fungsi clear () ini dalam keadaan default akan membersihkan seluruh flag, kita dapat menentukan flag yang mana yang akan dibersihkan, dengan memrikan argumen yang sesuai. Fungsi rdstate () yang mempunyai bentuk umum: int rdstate(); int rdstate() digunakan untuk menentukan jenis kesalahan yang terjadi, dengan mengembalikan nilai integer kesalahan tersebut. Nilai enum yang dikembalikan oleh fungsi rdstate() adalah : goodbit 0 jika tidak ada error 1 jika terjadi error TPT- 2 5 eofbit 1 jika eof ditemukan 0 ika eof tidak ditemukan failbit 1 jika non fatal error ditemukan 0 jika tidak badbit 1 jika fatal error ditemukan 0 jika tidak Contoh Program : // Nama file : error1.cpp #include <fstream.h> void cek_status (ifstream& in ); main() { ofstream fout (“d:tes”); if ( !fout ) { cout << “ File Gagal dibuka \n”; return 1; } fout << “ Ini adalah tes “ << end1; fout.close (); ifstream fin(d:tes”; if (!fin ) { cout << “ File gagal dibuka \n”; return 1; } TPT- 2 6 char ch; while (fin.get (ch)){ cout << ch; cek_status (fin); fin.close (); return 0; } void cek_status (ifstream& in) { int I = in.mrdstate (); if ( I & ios::eofbit ) cout << “ Eof \ n”; else if ( I & ios::failbit ) cout << “ fail bit \n”; else if ( I & ios::badbit) cout << “ bad bit \ n”; } Hasil dari program tersebut : Ini adalah tes EOF TPT- 2 7 I/O karakter dengan get(), put() dan putback() function Salah satu fungsi untuk melakukan input dan output pada file binari telah digunakan pada program sebelumnya yaitu fungsi get () dan put (). Bentuk umum kedua fungsi tersebut adalah : iostream &get (char& ch); ostream &put (char ch); Fungsi get () akan membaca sebuah karakter dari stream dan karakter tersebut akan diletakkan pada variabel ch. Fungsi ini akan mengembalikan reference ke strream jika EOF ditemukan maka nilai yang akan dikembalikan adalah NULL Fungsi put() akan meletakkan sebuah karakter ke suatu stream dan akan mengembalikan reference ke stream. Untuk membaca dan menulis file binari dalam bentuk blok data kita dapat menggunakan fungsi read () dan write (). Bentuk Umumnya : istream& read(unsigned char* buf, int num); ostream& write(const unsigned char* buf, int num); Fungsi read() akan membaca sejumlah num byte dari stream dan akan meletakkan data tersebut ke dalam variabel yang ditunjuk oleh pointer buf. Fungsi write() akan menulis sejumlah num byte ke stream dari data yang ditunjuk oleh pointer buf. TPT- 2 8