0% found this document useful (0 votes)
2 views20 pages

Chapter 13-File

Uploaded by

aradmard513
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views20 pages

Chapter 13-File

Uploaded by

aradmard513
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 20

1

‫مبانی کامپیوتر و برنامهنویسی‬

‫راضیه قیاسی‬
‫‪[email protected]‬‬

‫دانشگاه پردیس فارابی دانشگاه تهران‬


‫نیمسال اول ‪1400-1399‬‬

‫‪2‬‬
‫فصل سیزدهم‪ :‬فایل‬

‫‪3‬‬
‫مقدمه‬
‫• متغیرها و آرایهها‪ ،‬تنها قادر به نگهداری موقت دادهها هستند‪.‬‬
‫• زمانیکه متغیر به خارج از قلمرو خود میرود یا برنامه خاتمه مییابد‪ ،‬دادهها از بین میرود‪.‬‬
‫• فایلها برای نگهداری طوالنی مدت حجم زیاد دادهها‪ ،‬حتی زمانیکه برنامه ایجادکننده آنها خاتمه یابد‪ ،‬استفاده میشود‪.‬‬
‫• ‪ C++‬کلیه عملیات ورودی و خروجی و فایل را به صورت جریانی از بایتها انجام میدهد‪.‬‬
‫• یک جریان (‪ )stream‬دنبالهای از بایتهاست که هر بایت نشاندهنده یک کاراکتر است‪.‬‬

‫فایل‬ ‫‪4‬‬
‫انواع فایل‬
‫• باینری‪:‬‬
‫• به صورت باینری ذخیره میشود و به همان صورت نمایش داده میشود‪.‬‬
‫• در حالت باینری هر فایل یک فرمت بایت به بایت دارد که باعث می شود فایل در ادیتور اسکی خوانا نباشد و کاراکترهای عجیبی‬
‫نشان داده شود‪.‬‬
‫• متنی‪:‬‬
‫• یک فایل متن شامل مجموعهای از خطوط است‪ .‬هر خط شامل مجموعهای از کاراکترهاست که به کاراکتر انتهای خط (‪)newline‬‬
‫ختم میشود‪ .‬ماکزیمم طول هر خط ‪ 255‬کاراکتر است‪.‬‬
‫• به صورت باینری ذخیره میشود اما به صورت متنی نمایش داده میشود‪.‬‬

‫فایل‬ ‫‪5‬‬
‫انواع دسترسی به فایل‬
‫• دسترسی ترتیبی‪:‬‬
‫• خواندن و نوشتن از ابتدای فایل به ترتیب‪ .‬صفحه کنسول از این نوع است‪.‬‬
‫• دسترسی تصادفی‪:‬‬
‫• خواندن و نوشتن از مکان خاص‬

‫فایل‬ ‫‪6‬‬
‫کالسهای مورد نیاز برای کار با فایل‬
‫• در ‪ C++‬برای کار کردن با فایل باید شیای از کالسهای‪:‬‬
‫• ‪ :ifstream‬مناسب کار با فایل ورودی‬
‫• ‪ :ofstream‬مناسب کار با فایل خروجی‬
‫• ‪ : iofstream‬مناسب کار با فایل ورودی و خروجی‬
‫• ساخته شود که در سرفایل ‪ fstream‬قرار دارند‪.‬‬
‫• نحوه ایجاد فایل‪:‬‬

‫;𝑛𝑖 𝑚𝑎𝑒𝑟𝑡𝑠𝑓𝑖‬
‫;𝑡𝑢𝑜 𝑚𝑎𝑒𝑟𝑡𝑠𝑓𝑜‬
‫;𝑡𝑢𝑜𝑛𝑖 𝑚𝑎𝑒𝑟𝑡𝑠𝑓‬

‫فایل‬ ‫‪7‬‬
‫اعمال قابل انجام بر روی فایلها‬
‫باز کردن فایل (تابع )(‪)open‬‬ ‫•‬
‫نوشتن در فایل (عملگر <<‪ ،‬توابع خروجی برای فایلهای متنی و تابع ‪ write‬برای فایلهای باینری)‬ ‫•‬
‫خواندن از فایل (عملگر >> ‪ ،‬توابع ورودی برای فایلهای متنی و تابع ‪ read‬برای فایلهای باینری)‬ ‫•‬
‫بستن فایل (تابع )(‪)close‬‬ ‫•‬
‫و ‪..‬‬ ‫•‬

‫فایل‬ ‫‪8‬‬
‫باز کردن فایل‬
‫• تابع )(‪open‬‬

‫)‪fileobject_name.open (file_name, mode_flag‬‬

‫آدرس و نام فایل‬ ‫نوع و حالت ایجاد فایل‬

‫آدرس فایل میتواند مطلق یا نسبی (با توجه به مکان جاری در هر سیستم‪-‬مناسب تر است) باشد‪.‬‬
‫آدرس مطلق ‪D:\\program\\test.cpp‬‬

‫;)"‪in.open("test.txt‬‬ ‫ایجاد فایل در مسیر برنامه‬

‫;)"‪out.open("i:\\test.txt‬‬

‫;)‪inout.open("test.txt“, ios::in | ios::out‬‬

‫فایل‬ ‫‪9‬‬
‫حالت ایجاد فایل‬

‫توضیح‬ ‫پرچم‬
‫باز کردن فایل و قرار دادن اشارهگر در انتهای فایل برای خواندن از انتهای فایل‪.‬‬ ‫‪ios::ate‬‬
‫باز کردن فایل به صورت باینری‪.‬‬ ‫‪ios::binary‬‬
‫باز کردن فایل به صورت ورودی‪ .‬اگر فایل موجود نباشد‪ ،‬عملیات باز کردن فایل با‬
‫خطا مواجه می شود‪.‬‬ ‫‪ios::in‬‬

‫باز کردن فایل به عنوان خروجی‪ .‬به صورت پیش فرض محتوای قبلی موجود در‬
‫فایل (در صورت وجود) پاک می شود‪.‬‬ ‫‪ios::out‬‬

‫پاک کردن محتوای فایل در صورت وجود‪.‬‬ ‫‪ios::trunc‬‬


‫باز کردن فایل و قرار دادن اشارهگر در انتهای فایل برای نوشتن در انتهای فایل‪.‬‬ ‫‪ios::app‬‬
‫باز کردن فایل به صورت باینری‬ ‫‪ios::binary‬‬

‫فایل‬ ‫‪10‬‬
‫مثال‬
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
ifstream in;
string name, family;
int age; ‫باز کردن فایل به عنوان ورودی‬
in.open("test.txt");
in>>name>>family>>age;
‫عملگر ورودی برای خواندن از فایل‬
cout<<name<<" "<<family<<" "<<age<<"\n";
in.close(); ‫بستن فایل‬
}

‫فایل‬ 11
‫مثال‬
int main()
{
fstream inout("test.txt", ios::in);
string name, family;
int age;
inout>>name>>family>>age;
cout<<name<<" "<<family<<" "<<age<<"\n";
inout.close();
inout.open("test.txt",ios::out|ios::app);
inout<<name<<" "<<family<<" "<<age<<"\n";
inout.close();
}

‫فایل‬ 12
‫نکته‬
‫• تحت شرایطی ممکن است باز کردن فایل با عدم موفقیت روبرو شود نظیر‪:‬‬
‫• استفاده از نام فایل غیر مجاز‬
‫• موجود نبودن فایل روی دیسک یا مسیر ذکر شده‬
‫• نداشتن اجازه دسترسی‬
‫• اگر بازکردن فایل موفق نباشد تابع مقدار ‪ NULL‬را برمیگرداند‪.‬‬
‫• میتوان قبل از استفاده از فایل‪ ،‬از تابع ‪ is-open‬یا نام فایل برای بررسی باز شدن فایل استفاده کرد‪.‬‬

‫فایل‬ ‫‪13‬‬
int main() ‫مثال‬
{
string name, family;
fstream inout("test.txt", ios::in);
int age;
if(!inout)
{
cout<<" the file can not be opened!\n";
exit(0);
}
else
{
inout>>name>>family>>age;
cout<<name<<" "<<family<<" "<<age<<"\n";
inout.close();
}
inout.open("test.txt",ios::out|ios::app);
if(!inout.is_open())
{
cout<<"the file can not be opened!\n";
exit(0);
}
else
{
inout<<name<<" "<<family<<" "<<age<<"\n";
inout.close();
}
} ‫فایل‬ 14
‫تمرین‬
.‫• برنامه بنویسید که اسامی تعدادی دانشجو را دریافت کرده و در خروجی چاپ نماید‬

#include <iostream>
#include <fstream>
#include<string>
using namespace std;
int main()
{
fstream in("name.txt", ios::in);
string name;
if(in)
{
while (!in.eof()) .‫انتهای فایل برسد از فایل میخواند‬ ‫تا وقتی به‬
{
getline(in,name);
cout << name << endl;
}
}
else
cout<<"the file can not opend!\n";
return 0;
}

‫فایل‬ 15
...‫نکته‬
void ModifyFile(ifstream &in, ofstream &out)
{
string s; .‫باشد‬ ‫ارسال و بازگشت فایل به تابع باید به صورت ارجاعی‬
if (in)
{
in >> s;
in.close();
}
if (out)
{
out << "Text for outputting";
out<<s;
out.close();
}
}
int main()
{
char *FilePath=new char[80];
cout << "Please enter a file path: ";
cin >> FilePath;
ifstream in(FilePath);
ofstream out(FilePath, ios::app);
ModifyFile(in, out);
return 0;
} ‫فایل‬ 16
‫تمرین‬
.‫ همچنین امکان جستجو را فراهم نماید‬.‫ چاپ نماید‬،‫• برنامه ای بنویسید که نام و شماره تلفن مخاطبین را از فایل خوانده‬
struct phonebook
{
string name;
string phone;
};
int count=0;

void read(phonebook p[], ifstream &f)


{
while (!f.eof())
{
f>>p[count].name>>p[count].phone;
count++;
}
}
string linear_search(phonebook p[], string n)
{
for (int i=0; i<count;i++)
if (p[i].name==n)
return p[i].phone;
return "not found";
}
‫فایل‬ 17
‫تمرین‬

void show(phonebook p[])


{
cout<<setw(20)<<"name"<<setw(20)<<"phone"<<"\n";
string s(40,'-');
cout<<s<<"\n";
for (int i=0; i<count; i++)

cout<<setw(20)<<p[i].name<<setw(20)<<p[i].phone<<"\n";
}

int main()
{
phonebook p[100];
ifstream f("phonebook.txt");
read(p,f);
show(p);
string name;
cout<<"name for search:";
cin>>name;
cout<<"phone "<<name<<"is "<<linear_search(p,name);
}

‫فایل‬ 18
‫دسترسی تصادفی‬
‫• به منظور دسترسی تصادفی میتوان از تابع زیر استفاده کرد‪.‬‬

‫توضیح‬ ‫تابع‬
‫مکان اشارهگر خواندن را در فایل ورودی برمیگرداند‪.‬‬ ‫‪tellg‬‬
‫مکان اشارهگر نوشتن را در فایل خروجی برمیگرداند‪.‬‬ ‫‪tellp‬‬
‫مکان اشارهگر خواندن را در فایل ورودی تغییر میدهد‪.‬‬ ‫‪seekg‬‬
‫مکان اشارهگر نوشتن را در فایل خروجی تغییر میدهد‪.‬‬ ‫‪seekp‬‬

‫فایل‬ ‫‪19‬‬
‫مثال‬

int main()
{
ifstream in("test.txt");
ofstream out("test1.txt");
string name;
if(in && out)
{
in>>name;
int pos=in.tellg();
in.close();
out.seekp(pos);
name +=" reze";
out<<name;
out.close();
}
else
cout<<"the file can not opend!\n";
return 0;
}

‫فایل‬ 20

You might also like