clover
جمعه 09 مرداد 1388, 21:18 عصر
اکثر مثال هایی که تا کنون در این فروم گفته شده اند برنامه های ++C هستند که از stream های از پیش تعریف شده cin و cout استفاده می کنند .اما ممکن است که برنامه شما نیاز داشته باشد که stream های خاص خودش را برای I/O ایجاد کند . اگر برنامه ای نیاز داشته باشد که یک فایل را برای ورودی یا خروجی ایجاد کند ، باید یک فایل header به نام fstream را لحاظ ( include ) کند .( iostream ، fstream را نیز لحاظ می کند ) . کلاس های ifstream و ofstream به ترتیب از istream و ostream مشتق شده اند و عملگر های استخراج و درج را به ارث برده اند . برنامه ++C زیر نشان می دهد که چگونه به ترتیب با استفاده از ofstream و ifstream می توان یک فایل را برای خواندن و نوشتن تعریف کرد .
#include<iostream>
#include <fstream>
#include<conio.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
char ch;
ofstream ofsout("c:\\text.dat",ios::out);
if( !ofsout )
cerr << "\nUnable to open 'text.in' for input .\n";
ch = _getch();
while( ch != 13 ) // While Not Press Enter
{
cout << ch;
ofsout.put(ch);
ch = _getch();
}
ofsout.close();
cout << endl;
ifstream ifsin("c:\\text.dat",ios::in);
if( !ifsin )
cerr << "\nUnable to open 'text.in' for input .\n";
while ( ifsin.get(ch))
cout << ch;
ifsin.close();
cout << endl << "Press any Key ...";
_getch();
return 0;
}
توضیح :
این برنامه شئ ofsout را از کلاس ofstream تعریف می کند و به فایل text.dat که در درایو c قرار دارد متصل می کند ( در صورتی که فایل وجود نداشته باشد ، ایجاد می شود ) .
ofstream ofsout("c:\\text.dat",ios::out);
همیشه برای هر برنامه ای که با فایل کار می کند خوب است که وجود یا ایجاد فایل مشخص شده در مد designated را بررسی کنید . با استفاده از handle فایل ofsout ، می توان از یک دستور if ساده برای بررسی وضعیت فایل استفاده کرد .
if( !ofsout )
cerr << "\nUnable to open 'text.in' for input .\n";
همین روند برای ifsin نیز به کار می رود ولی با این تفاوت که این فایل از کلاس ifstream مشتق می شود .
سپس با استفاده از یک دستور while تا زمانی که کاربر کلید Enter ( کد اسکی 13 ) را فشار نداده است ، کاراکتر ها را با تابع ()put در فایل می نویسد . و پس از اتمام کار فایل مورد نظر را با تابع ()close می بندد . بستن فایل خروجی می تواند برای خالی کردن تمام داده هایی که به صورت داخلی بافر شده اند ضروری باشد .
در ادامه ، برنامه شئ ifsin را از کلاس ifstream تعریف می کند و به همان فایل ( text.dat ) متصل می کند .
ifstream ifsin("c:\\text.dat",ios::in);
سپس با استفاده از دستور while تا زمانی که کاراکتر خوانده شده EOF نباشد به خواندن و چاپ کاراکتر ادامه می دهد .
#include<iostream>
#include <fstream>
#include<conio.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
char ch;
ofstream ofsout("c:\\text.dat",ios::out);
if( !ofsout )
cerr << "\nUnable to open 'text.in' for input .\n";
ch = _getch();
while( ch != 13 ) // While Not Press Enter
{
cout << ch;
ofsout.put(ch);
ch = _getch();
}
ofsout.close();
cout << endl;
ifstream ifsin("c:\\text.dat",ios::in);
if( !ifsin )
cerr << "\nUnable to open 'text.in' for input .\n";
while ( ifsin.get(ch))
cout << ch;
ifsin.close();
cout << endl << "Press any Key ...";
_getch();
return 0;
}
توضیح :
این برنامه شئ ofsout را از کلاس ofstream تعریف می کند و به فایل text.dat که در درایو c قرار دارد متصل می کند ( در صورتی که فایل وجود نداشته باشد ، ایجاد می شود ) .
ofstream ofsout("c:\\text.dat",ios::out);
همیشه برای هر برنامه ای که با فایل کار می کند خوب است که وجود یا ایجاد فایل مشخص شده در مد designated را بررسی کنید . با استفاده از handle فایل ofsout ، می توان از یک دستور if ساده برای بررسی وضعیت فایل استفاده کرد .
if( !ofsout )
cerr << "\nUnable to open 'text.in' for input .\n";
همین روند برای ifsin نیز به کار می رود ولی با این تفاوت که این فایل از کلاس ifstream مشتق می شود .
سپس با استفاده از یک دستور while تا زمانی که کاربر کلید Enter ( کد اسکی 13 ) را فشار نداده است ، کاراکتر ها را با تابع ()put در فایل می نویسد . و پس از اتمام کار فایل مورد نظر را با تابع ()close می بندد . بستن فایل خروجی می تواند برای خالی کردن تمام داده هایی که به صورت داخلی بافر شده اند ضروری باشد .
در ادامه ، برنامه شئ ifsin را از کلاس ifstream تعریف می کند و به همان فایل ( text.dat ) متصل می کند .
ifstream ifsin("c:\\text.dat",ios::in);
سپس با استفاده از دستور while تا زمانی که کاراکتر خوانده شده EOF نباشد به خواندن و چاپ کاراکتر ادامه می دهد .