بخشی از پاورپوینت
اسلاید 1 :
فایل ها
اسلاید 2 :
لزوم استفاده از فایل ها:
داده های ذخیره شده در متغییر ها ، اشیاء و آرایه ها که تاکنون از آنها برای ذخیره اطلاعات استفاده می کردیم در حافظهRAM تشکیل می شوند
و با قطع جریان برق از بین می روند برای رفع این مشکل داده ها را بر روی حافظه های جانبی مثل دیسک های مغناطیسی ، دیسک های نوری و نوار باید ذخیره کرد . منبع ذخیره و بازیابی داده ها بر روی حافظه جانبی را فایل گویند .
اسلاید 3 :
مفهوم فایل ها در C++
C++ فایل ها را به صورت مجموعه ای از بایت ها در نظر می گیرد
اسلاید 4 :
انواع فايل از نظر نوع اطلاعات :
داده ها در فایل به دو صورت نوشته می شوند :
1- متن
2- باینری
در هر دو روش، دنباله ای از بایتها داخل حافظه دائمی نوشته میشوند.
در روش متنی، هنگام نوشتن اطلاعات در فایل، داده ها بصورت دنباله ای از کالاکترها نوشته میشوند و هنگام خواندن اطلاعات نیز باید عکس این عمل اتفاق بیافتد.
ولی در روش باینری، اطلاعات همانگونه که در RAM هستند به حافظه دائمی منتقل میشوند.
اسلاید 5 :
مثال
در نظر بگیرید که عدد صحیح دو بایتی n=2345 را میخواهیم درون فایل ذخیره کنیم.
حالت اول) اگر فایل را بصورت متنی ایجاد و از توابع خواندن و نوشتن متنی استفاده کنیم، هنگام نوشتن عدد n، چهار بایت درون فایل نوشته میشود. که به ترتیب کد اسکی عدد 2، کد اسکی عدد 3 ، کد اسکی عدد 4 و کد اسکی عدد 5 است. یعنی مجموعاً فایل ایجاد شده حاوی 4 بایت خواهد بود.
(2345)(‘2’,’3’,’4’,’5’)(50,51,52,53)
(0x32,0x33,0x34,0x35)
حالت دوم) اگر فایل را بصورت باینتری ایجاد و از توابع خواندن و نوشتن باینتری استفاده کنیم. عدد n بصوت 2 بایت یعنی به شکل زیر ذخیره میشود.
(2345)(0X0929)
اسلاید 6 :
- تبدیل فرمت در فایل متنی
نکته :
این تبدیلات مستلزم صرف وقت است بنابراین دسترسی به اطلاعات موجود در فایل متنی کندتر از فایل های باینری است .
از آنجا که یک فایل متنی را با مرورگرهای مختلف میتوان خواند لذا ایجاد و کار با فایلهای متنی از اهمیت بالایی برخوردارند.
اسلاید 7 :
در هر دو روش ذخیره فایل ، طول فایل توسط سیستم نگهداری می شود و انتهای فایل با توجه به این طول مشخص می شود . در حالت متنی کاراکتر EOF كه معادل 0xff و يا -1 است، مشخص کننده انتهای فایل است.
لذا نحوه تشخیص انتهای فایل در فایل باینری با فایل متنی متفاوت است .
تعیین انتهای فایل :
اسلاید 8 :
کلاس های فایل :
برای ورودی-خروجی فایل باید فایل را به برنامه C++ ضمیمه کرد:
#include
اسلاید 9 :
باز کردن و بستن فایل :
هر فایل قبل از اینکه مورد استفاده قرار گیرد باید باز شود. هنگام باز کردن فایل ، موارد زیر باید مشخص شوند :
1. نام فایل داده
2. نوع فایل از نظر ذخیره اطلاعات متنی یا باینری
3. نوع فایل از نظر ورودی – خروجی
نام فایل از ترکیبی از حروفa تا z و خط ربط_ تشكيل ميشود
اسلاید 10 :
برای باز کردن فایل ابتدا باید مجرایی را از نوع این کلاس ها تعریف کرد و سپس فایلی را به این مجرا ها نسبت داد .
ifstream f1; //input stream
ofstream f2; //output stream
fstream f3;//input output stream
دستور سوم , f2دستور دوم مجرای خروجی , f1دستور اول مجرای ورودی
را ایجاد می کند f3مجرای ورودی-خروجی
اسلاید 11 :
حالت فایل :
حالت فایل دو چیز را مشخص می کند :
1. عملی که با فایل باید انجام شود
2. روش ذخیره اطلاعات از نظر متنی یا باینری بودن
سه عمل را می توان با فایل انجام داد :
1. عمل ورودی (در این حالت فایل طوری باز میشود که فقط می توان اطلاعات را از آن خواند این فایل را فایل ورودی گویند)
2. عمل خروجی(در این حالت فایل طوری باز میشود که فقط می توان اطلاعات را در آن نوشت اين فایل را فایل خروجی گویند)
3. عمل ورودی- خروجی
(در این حالت فایل طوری باز میشود که همزمان می توان اطلاعات را از آن خواند و نوشت این فایل را فایل ورودی-خروجی گویند )
اسلاید 12 :
حالت فایل :
اسلاید 13 :
مثال :
ofstream f1;
ifstream f2;
fstream f3;
f1.open (“data1.dat” , ios::out);
f2.open (“data2.dat” , ios::in);
f3.open (“data3.dat” , ios::in | ios::out);
اسلاید 14 :
نکته :
قبل از کار با فایل باید از باز بودن فایل اطمینان حاصل کرد برای این کار می توان از دستورات زیر استفاده کرد .
if(!myfile)
{
cout<<“can not open file”;
…
} نام مجرای ماست) myfile(
یا می توان از تابع is_open() استفاده کرد در صورت باز بودن فایل ارزش درستی در غیر این صورت ارزش نادرستی را برمی گرداند .
if(!myfile.is_open())
{
cout<<“can not open file”;
…
}
اسلاید 15 :
نکته :
حتماً بعد از استفاده از فایل باید فایل را بست .
هنگام بسته شدن برنامه تمام فایل های باز آن بسته می شوند .
تعداد فایل هایی که در هر برنامه می توان باز نگه داشت محدود است .
در برخی از کاربرد ها اگر متوجه فایل های باز نباشیم ممکن است از حد متعارف تجاوز کنیم.
براي بستن يك فايل از تابع close استفاده ميكنيم:
my file.close();
اسلاید 16 :
تست انتهای فایل :
از اعمالی هنگام خواندن داده ها باید انجام دهیم ، تست انتهای فایل است .
به بیان دیگر یعنی باید هنگام خواندن اطلاعات از فایل به طریقی تشخیص دهیم که به انتهای فایل رسیدیم یا خیر .
برای تست انتهای فایل از تابع eof() استفاده می کنیم
bool ios::eof();
اگر فایلی که این تابع بر روی آن عمل می کند به انتها رسیده باشد ، این تابع ارزش درستی و گرنه ارزش نادرستی را برمی گرداند .
اسلاید 17 :
برنامه اي بنويسيد كه فايل aa.txt را در فايل bb.txt كپي كند
اسلاید 18 :
void main()
{
ifstream InFile;
ofstream OutFile;
InFile.open("c:\\aa.txt",ios::in);
if (InFile.is_open()==false)
{
cout<<"Can not open input file";
return;
}
OutFile.open("c:\\bb.txt",ios::out);
if(OutFile.is_open()==false)
{
cout<<"Can not open output file";
InFile.close();//Close the input file
return;
}
while(!InFile.eof())
{
char ch;
InFile.get(ch);
OutFile.put(ch);
}
InFile.close();
OutFile.close();
}
اسلاید 19 :
شیوه های ذخیره و بازیابی اطلاعات :
1. داده ها کاراکتر به کاراکتر در فایل نوشته می شوند سپس کاراکتر به کاراکتر از فایل خوانده می شوند.
2. داده ها به صورت رشته ای از کاراکتر ها در فایل نوشته و سپس به همان شکل از فایل خوانده می شوند.
3. داده ها در حین نوشتن بر روی فایل ، با فرمت خاصی نوشته و سپس به همان فرمت خوانده می شوند.
4. داده ها به شکل ساختمان (رکورد) بر روی فایل نوشته شده سپس به صورت ساختمان از فایل
خوانده می شوند.
اسلاید 20 :
توابع خروجی:
نوشتن در فایل با استفاده از اپراتور <<
put(ch)یک بایت در فایل می نویسد.
write(buff , size) آدرس يك خانه و تعداد بايتها را گرفته و آنرا در فایل می نویسد.
توابع ورودی:
خواندن از فایل با استفاده از اپراتور >>
get(ch) یک بایت از فایل خوانده و درون ch قرار می هد.
تابع get كه حالتهاي مختلف دارد و يكي از حالتهاي آن get(str , max) ميباشد كه با توجه به تعداد كاراكتر وارد شده از فايل خوانده و در آرايه str قرار می دهد.
تابع getline(str , max , DELIM) یک خط از فایل ورودی را خوانده تا به كاركتر DELIM ويا تعداد بايت خوانده شده به اندازه max برسد.
read(buff , size) آدرس يك خانه و تعداد بايتها را گرفته و تعداد بايد خواسته شده را از فايل ميخواند و در بافر قرار می دهد.
توابع ورودی و خروجی :