STREAM dan FILE
Sistem I/O dari C++ dapat berhubungan dengan pemrogram tanpa tergantung pada alat yang
dipakai. Hal ini dapat tercapai karena system I/O memberikan abstraksi antara pemrogram dengan
alat yang dipakai. Abstraksi ini dinamakan stream. Alat yang sebenarnya dipakai dinamakan file.
Alat-alat yang dipakai dapat bermacam-macam, misalnya:terminal, disk drive, tape drive,
dan lain-lain. Sistem I/O C++ mengubah setiap alat logic tersebut dengan sebuah stream.
FUNGSI-FUNGSI SISTEM I/O FILE
Fungsi Operasi
fopen() Membuka sebuah stream
fclose() Menutup sebuah stream
putc Menulis sebuah karakter ke dalam sebuah stream
getc Membaca sebuah karakter dari sebuah stream
fseek Mencari byte tertentu di dalam sebuah stream
fprint Sama dengan printf(), tetapi tujuannya ke sebuah stream
fscan() Sama dengan scanf(), tetapi dari sebuah stream
feof() Menghasilkan true, jika sudah tercapai akhir file
ferror() Menghasilkan true, jika terjadi kesalahan
fread() Membaca sebuah blok data dari sebuah stream
fwrite() Menulis sebuah blok data dari sebuah stream
rewind Memindahkan penunjuk ke awal file
remove Menghapus file
MODUS PEMBUKAAN FILE
Modus Artinya
“r” Membuka file untuk pembacaan data
“w” Membuka file untuk penulisan data
“a” Menambah data ke dalam file
“rb” Membuka file biner untuk pembacaan data
“wb” Membuka file biner untuk penulisan data
“ab” Menambah data ke dalam file
“r+” Membuka file untuk pembacaan / penulisan data
“w+” Membuka file untuk penulisan / pembacaan data
“a+” Menambah atau membuat sebuah file untuk pembacaan / penulisan
“r+b” Membuka file biner untuk pembacaan / penulisan data
“w+b” Membuka file biner untuk penulisan / pembacaan data
Contoh program :
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
struct dt_teman
{ char nama[20];
char alamat[30];
char telepon[12];
}teman;
FILE *fp;
menu();
isi_data();
baca_data();
ubah_data();
main()
{
char pilih='0';
while (pilih !='6')
{
menu();
pilih=getche();
switch(pilih)
{
case '1' : if ((fp=fopen("D:\\data.txt","rb"))!=NULL)
{ gotoxy(20,18);printf("File sudah dibuka, tekan Enter !");
getche();fclose(fp);
}
else
{ fp=fopen("D:\\data.txt","wb");
isi_data();
fclose(fp);
}
break;
case '2' : fp=fopen("D:\\data.txt","ab");
isi_data();
fclose(fp);
break;
case '3' : if ((fp=fopen("D:\\data.txt","r+b"))==NULL)
{
gotoxy(20,18);printf("File belum ada, tekan Enter !");getche();
break;
}
ubah_data();
fclose(fp);
break;
case '4' : if ((fp=fopen("D:\\data.txt","rb"))==NULL)
{
gotoxy(20,18);printf("File belum ada, tekan Enter !");getche();
break;
}
baca_data();getche();
fclose(fp);
break;
case '5' : remove("D:\\data.txt");
gotoxy(20,18);printf("File sudah dihapus, tekan Enter !");
getche();
break;
}
}
return 0;
}
menu()
{
clrscr();
gotoxy(20,8);printf(" MENU ");
gotoxy(20,9);printf("---------------------------------");
gotoxy(20,10);printf("1. Membuat File Baru");
gotoxy(20,11);printf("2. Menambah Data");
gotoxy(20,12);printf("3. Mengubah Data");
gotoxy(20,13);printf("4. Menampilkan Data ke layar");
gotoxy(20,14);printf("5. Menghapus file");
gotoxy(20,15);printf("6. Selesai/Exit");
gotoxy(20,16);printf("---------------------------------");
gotoxy(20,17);printf("Pilihan Anda : ");
return 0;
}
isi_data()
{
clrscr();
printf(" FILE telah dibuka dengan nama DATA.TXT\n\n");
printf(" Nama (0=berhenti) : ");gets(teman.nama);
while (teman.nama[0] !='0')
{
printf(" Alamat : ");gets(teman.alamat);
printf(" Nomor Telepon : ");gets(teman.telepon);
fwrite(&teman,sizeof(teman),1,fp);
printf("\n Nama (0=berhenti) : ");gets(teman.nama);
}
return 0;
}
ubah_data()
{
int norec;long int offset;clrscr();
printf(" Nomor record yang akan diubah : ");scanf("%d",&norec);
offset=(norec-1)*sizeof(teman);
if (fseek(fp,offset,0)!=0)
{
printf(" Tidak dapat mencari record ! ");getche();
return 0;
}
fread(&teman,sizeof(teman),1,fp);
printf("\n\n Data Lama \n");
printf(" --------------------------------------\n");
printf(" Nama : %s\n",teman.nama);
printf(" Alamat : %s\n",teman.alamat);
printf(" Nomor Telepon : %s\n",teman.telepon);
fseek(fp,offset,0);
printf("\n\n Data Baru \n");
printf(" --------------------------------------\n");
printf(" Nama : ");scanf("%s",&teman.nama);
printf(" Alamat : ");scanf("%s",&teman.alamat);
printf(" Telepon : ");scanf("%s",&teman.telepon);
fwrite(&teman,sizeof(teman),1,fp);
return 0;
}
baca_data()
{
int i=1;clrscr();
printf("\n Data Teman-Teman Kampus \n");
printf(" --------------------------------------------------\n");
printf(" No NAMA ALAMAT TELEPON\n");
printf(" --------------------------------------------------\n");
while (fread(&teman,sizeof(teman),1,fp)==1)
{
printf(" %2d %-20s %-30s %-12s\n",i++,teman.nama,teman.alamat,teman.telepon);
}
printf(" --------------------------------------------------\n");
return 0;
}