وبلاگ دانشجویان مهندسی فناوری اطلاعات دانشگاه اصفهان

وبلاگ دانشجویان it ورودی 90 دانشگاه اصفهان

وبلاگ دانشجویان مهندسی فناوری اطلاعات دانشگاه اصفهان

وبلاگ دانشجویان it ورودی 90 دانشگاه اصفهان

فایل ها در ++C


یک سری اطلاعات در مورد کار با فایل ها در ++C البته بصورت خیلی خلاصه ، شاید به کارتون بیاد . 



از آنجایی که اغلب برنامه های امروزی با فایل سروکار دارند ، یک برنامه نویس لازم است با فایل آشنا باشد و بتواند از این امکان در کارایی برنامه هایش استفاده کند .

برای پردازش فایل ها در ++C ، از جریان fstream استفاه می شود که خود به دو زیر شاخه ofstream و ifstream تقسیم می شود .

ifstream برای خواندن اطلاعات از یک فایل به کار میرود و از ofstream برای نوشتن اطلاعات درون یک فایل استفاه میشود .

از آنجایی که این دو جریان در سرفایل <fstream> تعریف شده اند باید دستور زیر را به ابتدای برنامه اضافه نمایید :

#include <fstream>


سپس می توان عناصری از نوع جریان فایل را به شکل زیر تعریف کرد :

ifstream readfile("input.txt");
ofstream writefile("output.txt");

طبق کد بالا ، readfile عنصری است که داده ها را از فایلی به نام input.txt می خواند و writefile نیز عنصری است که اطلاعاتی را در فایلی به نام output.txt مینویسد .

هر فایل روی هارد دارای نامی است که هنگام کار کردن با آن مورد استفاده قرار می گیرد. نام فایل به صورت یک رشته کاراکتری است. در C++‎ نام فایل می تواند شامل اطلاعات مسیر هم باشد. منظور از مسیر ، دراویو و فولدری است که فایل در آنجا قرار دارد. اگر نام فایل بدون مسیر مشخص شود (مانند مثال بالا) محل فایل در موقعیت جاری درنظر گرفته می شود.

(منظور از موقعیت جاری همانجایی است که فایل cpp. برنامه ساخته می شود) 


مثال. فایل test.txt را از درایو E ، فولدر myfolder به منظور خواندن اطلاعات درون آن باز می کند :

ifstream myfile("E:\\myfolder\\test.txt");

نکته : در ++C برای جداکردن فولدرها به جای علامت \ باید از \\ استفاده شود .


بازکردن فایل
هنگامی که فایلی باز می شود برای خواندن و نوشتن آماده است. برای باز کردن فایل به منظور خواندن و یا نوشتن ، میتوان از روش بالا استفاده کرد و یا به روش زیر عمل کرد :


یعنی ابتدا یک متغیر از نوع (ifstrem یا ofstream) بسته به احتیاج تعریف شود :

ifstream infile;
ofstream outfile;


سپس فایل با استفاده از open باز شود. و بعد از آن اسم/مسیر فایل و درصورت تمایل مد مورد نظر تعیین شود . مد مشخص می کند فایل ورودی، خروجی یا هردو است.فرم کلی به صورت زیر است:

myfile.open(filename, mode);

با استفاده از عملگر | می توان چند مقدار را با هم تلفیق کرد .


چندمثال :

مثال. فایل متن myfile.txt را به منظور خواندن باز می کند :

infile.open("myfile.txt");


مثال. فایل باینری myfile.txt را به منظور خواندن باز می کند :

infile.open("myfile.txt",ios::in|ios::binary);


مثال. فایل متن myfile.txt را به منظور اضافه کردن به انتهای آن باز می کند :

outfile.open("myfile.txt",ios::app);

در مثال بالا ، عبارت ios::app باعث می شود بعد از هربار اجرای برنامه محتویات فایل myfile.txt پاک نشود واطلاعات به آخر فایل اضافه می گردد . همچنین اگر فایل myfile.txt روی هارد موجود نباشد ، خود ++C آن را بوجو می آورد . (دقت کنید که txt. جزو نام فایل نیست و فرمت فایل متنی است)


پس از انجام عملیات بر روی یک فایل ، برای بستن فایل از ()close استفاده می شود .

outfile.close();

خواندن و نوشتن فایل
بعد از بازکردن یک فایل ، برنامه می تواند داده را از فایل بخواند یا مقداری را در فایل بنویسد. برای فایل های متنی ، عملگرهای << و >> مشابه cin و cout‌ عمل می کنند و می توانند برای خواندن و نوشتن داده ها استفاده شوند .


مثال. ایجاد یک فایل متنی با نام test.txt :

#include <iostream>
using namespace std;
#include <fstream>
int main() {
     ofstream myfile ("test.txt");
     if (myfile.is_open()){
           myfile << "This is a test.\n";
           myfile << "abcdefg.\n";
           myfile.close();
      }
   return 0;
}

درمثال بالا عبارت myfile.is_open چک می کند که آیا فایل بدرستی باز (ایجاد) شده یا نه .


مثال . ایجاد یک دفترچه تلفن 

برنامه ی زیر چند نام و تلفن مربوط به هریک را دریافت کرده و در فایلی به نام phone.txt در درایو D ذخیره می کند ، با زدن 0 برنامه پایان می یابد :

#include <iostream>
using namespace std;
#include <fstream>
#include <string>
int main() {
     ofstream phonefile("D:\\phone.txt",ios::app);
     long number;
     string name;
     while(1) {
          cout<<"Enter number : ";
          cin>>number;
          if(number==0)
               break;
          phonefile<<number<<" ";
          cout<<"Enter name : ";
          cin>>name;
          phonefile<<name<<endl;
     }
     return 0;
}

در مثال بالا ، عبارت ios::app باعث میشود هنگام اجرای دوباره برنامه ، اطلاعات قبلی از روی فایل phone.txt پاک نشوند و به آخر فایل اضافه گردند .


مثال . جستجوی یک شماره

این برنامه فایل تولید شده در برنامه قبل را باز کرده و به دنبال یک شماره تلفن می گردد :

#include <iostream>
using namespace std;
#include <fstream>
#include <string>
int main() {
     ifstream phonefile("D:\\phone.txt");
     long number;
     string name,searchname;
     bool found=false;
     cout<<"Enter a name for finding : ";
     cin>>searchname;
     cout<<endl;
     while(phonefile>>number) {
          phonefile>>name;
          if (name==searchname) {
               cout<<name<<' '<<number;
               found=true;
          }
     }
     if (!found)
          cout<<searchname<<" doesn't exist in this list. "<<endl;
     return 0;
}

در مثال بالا بخش کنترلی حلقه به این صورت تعریف شده است phonefile>>number که دو وظیفه را انجام میدهد . 1 : یک عدد را از درون جریان phonefile میخواند و آن را درون number قرار میدهد . 2 : اگر عملیات خواندن موفقیت آمیز بود حلقه ادامه می یابد در غیر اینصورت متوقف میشود .

همچنین میتوان برای کنترل رسیدن به پایان فایل از عبارت ()eof. (مخفف end of file) بصورت زیر استفاده کرد :

while ( !phonefile.eof() )
{
     ...
}

در عبارت بالا ، تا وقتی که برنامه به آخر فایل نرسیده باشد دستورهای درون حلقه اجرا می گردند . 

منایع : اینترنت و جزوه دانشگاه پیام نور و ...


نظرات 7 + ارسال نظر
مهدیه دوشنبه 15 اسفند 1390 ساعت 08:53

خیلی خوب بود.ممنون.

فاطمه دوشنبه 15 اسفند 1390 ساعت 20:56

ممنون ،خب حالا سوال استادو چیجوری حل کنیم؟!

میترا پنج‌شنبه 16 آذر 1391 ساعت 01:07

از مطالبی که گذاشتید خیلی ممنون خیلی بهم کمک کرد.

saeid چهارشنبه 6 دی 1391 ساعت 20:20

سلام من یه سوالی داشتم چطوری میتونم واسه شرط گذاستن تو ایف بگم که تا موقع که فایلم خالی بود این کارا رو انجام بده
منظورم اینه که چه چیزی داخل if بنویسم که بفهمه فایلم خالیه؟
این یه خط کد رو به ایمیلم سند میکنی لطفاااااا
مممممممنون!

فرستادم

محمد سهرابی سه‌شنبه 4 تیر 1392 ساعت 10:38 http://it70.blogfa.com

salam
mer30 az matlab ali va ravoni ke gozashti .kheyli khob bood. age
dost dashti ye sari ham be ma bezan man shoma ro link mikonam shoma ham age dost dashti link kon.
bazam mer30000 mamnoooooooooooooooooooooon

مسیحا چهارشنبه 27 آذر 1392 ساعت 19:53

دمت گرم داداش عالی بود
از دیشب داشتم تازه file رو یاد میگرفتم خیلی جاها رو خوندم، از همه خلاصه تر و مفیدتر نوشته های شما بود.
co0ol

محمد جمعه 2 خرداد 1393 ساعت 12:24

مطالب خوبو مفیدی بود یه کوچولو از مشکلمو حل کرد ممنونم

یه سوال : میشه یه شی از یه کلاس رو توی فایل ذخیره کرد؟
مثلا اگه بخوام کلاس دانشجو رو در نظر بگیرم و وقتی یه دانشجوی جدید میسازم اونو توی فایل ذخیره کنم؟

برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد