Chapter 13-File
Chapter 13-File
راضیه قیاسی
[email protected]
2
فصل سیزدهم :فایل
3
مقدمه
• متغیرها و آرایهها ،تنها قادر به نگهداری موقت دادهها هستند.
• زمانیکه متغیر به خارج از قلمرو خود میرود یا برنامه خاتمه مییابد ،دادهها از بین میرود.
• فایلها برای نگهداری طوالنی مدت حجم زیاد دادهها ،حتی زمانیکه برنامه ایجادکننده آنها خاتمه یابد ،استفاده میشود.
• C++کلیه عملیات ورودی و خروجی و فایل را به صورت جریانی از بایتها انجام میدهد.
• یک جریان ( )streamدنبالهای از بایتهاست که هر بایت نشاندهنده یک کاراکتر است.
فایل 4
انواع فایل
• باینری:
• به صورت باینری ذخیره میشود و به همان صورت نمایش داده میشود.
• در حالت باینری هر فایل یک فرمت بایت به بایت دارد که باعث می شود فایل در ادیتور اسکی خوانا نباشد و کاراکترهای عجیبی
نشان داده شود.
• متنی:
• یک فایل متن شامل مجموعهای از خطوط است .هر خط شامل مجموعهای از کاراکترهاست که به کاراکتر انتهای خط ()newline
ختم میشود .ماکزیمم طول هر خط 255کاراکتر است.
• به صورت باینری ذخیره میشود اما به صورت متنی نمایش داده میشود.
فایل 5
انواع دسترسی به فایل
• دسترسی ترتیبی:
• خواندن و نوشتن از ابتدای فایل به ترتیب .صفحه کنسول از این نوع است.
• دسترسی تصادفی:
• خواندن و نوشتن از مکان خاص
فایل 6
کالسهای مورد نیاز برای کار با فایل
• در C++برای کار کردن با فایل باید شیای از کالسهای:
• :ifstreamمناسب کار با فایل ورودی
• :ofstreamمناسب کار با فایل خروجی
• : iofstreamمناسب کار با فایل ورودی و خروجی
• ساخته شود که در سرفایل fstreamقرار دارند.
• نحوه ایجاد فایل:
;𝑛𝑖 𝑚𝑎𝑒𝑟𝑡𝑠𝑓𝑖
;𝑡𝑢𝑜 𝑚𝑎𝑒𝑟𝑡𝑠𝑓𝑜
;𝑡𝑢𝑜𝑛𝑖 𝑚𝑎𝑒𝑟𝑡𝑠𝑓
فایل 7
اعمال قابل انجام بر روی فایلها
باز کردن فایل (تابع )()open •
نوشتن در فایل (عملگر << ،توابع خروجی برای فایلهای متنی و تابع writeبرای فایلهای باینری) •
خواندن از فایل (عملگر >> ،توابع ورودی برای فایلهای متنی و تابع readبرای فایلهای باینری) •
بستن فایل (تابع )()close •
و .. •
فایل 8
باز کردن فایل
• تابع )(open
آدرس فایل میتواند مطلق یا نسبی (با توجه به مکان جاری در هر سیستم-مناسب تر است) باشد.
آدرس مطلق D:\\program\\test.cpp
;)"out.open("i:\\test.txt
فایل 9
حالت ایجاد فایل
توضیح پرچم
باز کردن فایل و قرار دادن اشارهگر در انتهای فایل برای خواندن از انتهای فایل. ios::ate
باز کردن فایل به صورت باینری. ios::binary
باز کردن فایل به صورت ورودی .اگر فایل موجود نباشد ،عملیات باز کردن فایل با
خطا مواجه می شود. ios::in
باز کردن فایل به عنوان خروجی .به صورت پیش فرض محتوای قبلی موجود در
فایل (در صورت وجود) پاک می شود. ios::out
فایل 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;
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