چگونه ار باز شدن فایل مطمئن شویم؟
با استفاده از فانکشن is_open مثال :
std::fstream file;
file.open ("test.txt");
if (file.is_open())
{
//do stufs
}
else
{
std::cout << "Error opening file";
}
چه زمانی لازم است که از close برای بستن فایل استفاده کنیم ؟
fstream-ofstream-ifstream در c++ زمانی که از scope خارج میشوند و destructor شون صدا زده میشه ()close هم میشوند .
فقط وقتایی لازمه از ()close استفاده کنید که می خواهید با آبجکت fstream ای که ساخته اید یک فایل دیگه رو باز کنید.
مثال : کد زیر نیازی به close ندارد.
#include <fstream>
using namespace std;
int main ()
{
while(1)//nizay be file.close() nist inja
{
ofstream file;
file.open("a.txt",ios::app);
file<<"TEXT"<<endl;
// file.close();
}
return 0;
}
اطلاعات مربوط به محل ذخیره و نوشتن فایل کجا ذخیره میشوند ؟(get pointer-put pointer)
در ifstream محلی که قراره اطلاعات خونده بشن در یک پوینتر ذخیره میشن که اصطلاحا بهش get pointer میگن.
توی ofstream محلی که قراره اطلاعات نوشته بشن هم توی پوینتر ذخیره میشن که بهش put pointer میگن.
fstream چون هم توانایی نوشتن و هم خواندن رو داره هر 2 تای این پوینتر ها رو داره.
چگونه می توان محل put pointer , get pointer را فهمید ؟
محل put_pointer و get_pointer داخل 2 متغیر int ذخیره میشه که با tellp , tellgمیشه بهشون دسترسی داشت. (tellg مال get_pointer و برعکس)
مثال : کد زیر تعداد کاراکتر های یک فایل رو نشون میده
ifstream file ("a.txt", ios::in|ios::ate);//ate mahale get pointer ro mizare akhare file
cout<<file.tellg();//tellg() mahale get pointer ro bar migardoone
چگونه می توان محل put pointer , get pointer را عوض کرد؟
با استفاده از فانکشن های seekp,seekg
این 2 فانکشن رو میشه به یکی از 2 روش زیر استفاده کرد .
روش 1 :
seekg ( pos);
seekp ( pos);
;که این جا pos محل مورد نظر از ابتدای فایل میباشد.
مثال :
ifstream file("test.txt");
file.seekg(10);//be character 10 om file miravad... chon ifstream bood az seekg estefade kardim.
روش 2 :
seekg ( pos, direction );
seekp ( pos, direction );
پارامتر دوم مشخص میکنه که محل مورد نظر از ابتدا-انتها یا موقعیت فعلی محاسبه بشه .
پارامتر های ورودی میتوانند یکی از موارد زیر باشند :
-
ios::beg : محل از ابتدا
-
ios::cur : محل از موقعیت فعلی
-
ios::end : محل از انتها
مثال :
file.seekg(10,ios::beg);//moadele file.seekg(10);
file.seekg(10,ios::cur);//10 khane bad az mahale feli get_pointer
file.seekp(10,ios::end);//10 khane ghabl az entehaye file