Открытие, закрытие, чтение и запись на языке С.

Рубрика: C++, Дата: 14 April, 2013, Автор:

Возьмите базовые операции открытия, закрытия, чтения и записи из стандартного интерфейса языка С на вашей системе и напишите эквивалентные функции на языке С++, которые вызывают функции языка С, но в случае возникновения ошибок генерируют исключения.

Ну что ж господа я как то не знаю функции языка С для открытия, закрытия, чтения и записи, поэтому чтобы не тормозить процесс мы просто перегрузим функции С++, токо уже с вызовами исключения. Ну что ж ПОЕХАЛИ.

Вот код который у меня получился файл main.cpp:

#include <iostream>
using std::cout;
using std::cin;
using std::endl;
using std::cerr;
using std::ios;
#include <fstream>
using std::ifstream;
using std::ofstream;
#include <cstdlib>
using std::exit;
#include <string>
using std::string;

class File
{
	ifstream r;
	ofstream w;
public:
	File(char* f, char m)
	{
		if(m=='r')
		{
			r.open(f);

			if(!r)
			{
				cerr <<"don't open file"<<endl;exit(1);
			}
		}
		else if(m=='w')
		{
			w.open(f);
			if(!w)
			{
				cerr <<"don't open file"<<endl;exit(1);
			}
		}
	}
    ~File()
    {
            r.close();
            w.close();
    }
	
	string read()
	{
		string s="";
		string result="";
		while(getline(r,s))
		{
			//cout <<"mu tyt"<<endl;//mu cyda daje ne popadaem
			result+=s;
		}
		//cout <<result<<endl;//nichego ne vuvodit.
		return result;
	}

	void write(char* c)
	{
		w <<c;
	}
};

int main()
{
	char f[]="ex14_4.cpp";
	File fl(f,'r');
	//cout <<fl.read()<<endl;
	File fl1("txt.txt",'w');
	fl1.write("hellow world gacpada");

	return 0;
}

Что по нему сказать я новенькое для себя открыл это, то что ifstream и ofstream это классы, и для того чтобы установить в объект значение какое нить, то для него нужно вызвать метод open() в данном случае мы вызываем r.open(“имя файла”) и w.open(“имя файла”). Отакая от фигня. А исключения я забыл генерировать. Щас создам пример с исключениями.

#include <iostream>
using std::cout;
using std::cin;
using std::endl;
using std::cerr;
using std::ios;
#include <fstream>
using std::ifstream;
using std::ofstream;
#include <cstdlib>
using std::exit;
#include <string>
using std::string;

class File
{
	ifstream r;
	ofstream w;
public:
	class Except{};
	File(char* f, char m)
	{
		if(m=='r')
		{
			r.open(f);

			if(!r)
				throw Except();
		}
		else if(m=='w')
		{
			w.open(f);
			if(!w)
				throw Except();
		}
	}
    ~File()
    {
            r.close();
            w.close();
    }

	string read()
	{
		string s="";
		string result="";
		while(getline(r,s))
		{
			//cout <<"mu tyt"<<endl;//mu cyda daje ne popadaem
			result+=s;
		}
		//cout <<result<<endl;//nichego ne vuvodit.
		return result;
	}

	void write(char* c)
	{
		w <<c;
	}
};

int main()
{
	try
	{
		char f[]="x14_4.cpp";//генерирует исключение.
		File fl(f,'r');
		//cout <<fl.read()<<endl;
		File fl1("txt.txt",'w');
		fl1.write("hellow world gacpada");
	}
	catch(File::Except& a)
	{
		cout <<"don't open file"<<endl;
	}

	return 0;
}

В данном примере у нас в конструкторе генерируется исключение.

[youtube]http://www.youtube.com/watch?v=jmIeIKmWsX0[/youtube]

rss