++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);

در مثال بالا ، بعد از هربار اجرای برنامه محتویات فایل myfile.txt پاک نمیشود واطلاعات به آخر فایل اضافه می گردد .


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

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


پس از انجام عملیات بر روی یک فایل ، برای بستن فایل از ()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;
}


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

برنامه ی زیر چند نام و تلفن مربوط به هریک را دریافت کرده و در فایلی به نام 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;
}