با ایجاد پیوند بین یک جریان و فایل دیسک اتوماتیک یک بافر ایجاد و به جریان مرتبط می شود. بافر بلاکی از حافظه است که به عنوان واسطه ای بین جریان و سخت افزار دیسک عمل می کند و برای ذخیره موقت داده هائی که از فایل خوانده یا نوشته می شوند بکار می رود. چون دیسک درایو به صورت بلاکی کار می کند، داده ابتدا در بافر ذخیره می شود تا بافر پر شود سپس کل بافر به صورت یک بلاک روی دیسک ذخیره می شود. همین فرآیند زمان خواندن داده از دیسک هم اتفاق می افتد.
در طی اجرای برنامه داده هائی که برنامه روی فایل می نویسد ممکن است در بافر باقی بماند. اگر برنامه بدون بستن فایل خاتمه پیدا کند داده از بافر به درون فایل منتقل نمی شود و اطلاعات از دست می رود. بنابراین بعد از اینکه کارتان با فایل تمام شد باید آنرا ببندید. درصورت نیاز مجددا فایل را باز کنید.
متد close() فایل را می بندد. این متد کل جریان های بافر شده را به فایل منتقل می کند.
;()myfile.close
اگر برنامه دچار شکست شود داده ممکن است داده موجود در بافر از دست برود. برای جلوگیری از این کار در صورت نیاز با استفاده از متد flush() می توانید محتویات بافر را بدون بستن فایل به فایل منتقل کنید.
مثال. یک فایل ممکن است در برنامه به منظور خواندن و نوشتن چندبار باز و بسته شود.
#include <fstream.h>
#include <iostream.h>
int main () {
char buffer[256];
fstream myfile; // open it for output then write to it
myfile.open(“test2.txt”,ios::out | ios::trunc);
if (myfile.is_open()) {
myfile << “This outputting a line.n”;
myfile.close();
}
myfile.open(“test.txt”,ios::in); // open it for input and read in
myfile.getline(buffer,100);
cout << “The file contains ” << buffer << “n”;
myfile.close();
myfile.open(“test.txt”,ios::app); //open for appending and append
myfile << ” Hey this is another line n”;
myfile.close();
myfile.open(“test.txt”,ios::in); // open it for input and read in
myfile.getline(buffer,200);
cout << “The file contains ” << buffer << “n”;
myfile.close();
return 0;
}
نکته:
مدیریت بافر با سیستم عامل است.
قبل از خواندن یا نوشتن فایل آن را باز کنید.
همیشه بعد از بازکردن فایل چک کنید فایل بطور موفق باز شده است یا خیر.
موقعیت خود را درون فایل چک کنید تا از انتهای فایل عبور نکنید.
در انتها حتما فایل را ببندید