Читаем Освой самостоятельно С++ за 21 день. полностью

Рекомендуется:Постоянно проверяйте правильность открытия файла. Повторно используйте уже существyющиe oбъeкты ifstream и ofstream. Закрывайте все объекты fstream по завершении работы с ними.

Не рекомендуется:Не пытайтесь закрыть или переопределить объекты cin и cout.

<p>Двоичные и тектовые файлы</p>

Некоторые операционные системы, например DOS, различают текстовые и двоичные файлы. В первых все данные хранятся в виде текста (в кодах ASCII). Числовые значения, например 54321, хранятся в виде строки ('5','4','3','2','1'). Возможно это не совсем удобно, однако упрощает считывание информации многими простыми программами для DOS.

Чтобы помочь файловой системе отличить текстовый формат файла от двоичного, язык программирования C++ предоставляет флаг ios::binary. Во многих системах этот флаг игнорируется, поскольку все данные хранятся в двоичном формате. А в некоторых закрытых системах этот флаг вообще запрещен и не поддается компиляции!

В двоичных файлах могут храниться не только числа и строки, но и целые информационные структуры. Весь блок данных можно вывести сразу, используя метод write объекта fstream.

Записав данные с помощью write, можно возвратить эти данные обратно с помощью метода read. В качестве параметра эти функции-члены ожидают получить указатель на символ, поэтому перед использованием функции необходимо привести адрес класса к указателю на строку символов.

Второй аргумент этих функций задает количество записываемых символов. Это значение можно определить с помощью функции sizeof. Запомните, что записываются данные, а не методы. Соответственно и считываются только данные. В листинге 16.18 показано, как записать содержимое класса в файл.

Листинг 16.18. Запись класса в файл

1: #include fstream.h

2:

3: class Animal

4: {

5:    public:

6:       Animal(int weight, long days):itsWeight(weight), itsNumberDaysAlive(days){ }

7:       ~Animal{ }

8:

9:       int GetWeightconst { return itsWeight; }

10:      void SetWeight(int weight) { itsWeight = weight; }

11:

12:      long GetDaysAliveconst { return itsNumberDaysAlive; }

13:      void SetDaysAlive(long days) { itsNumberDaysAlive = days; }

14:

15:   private:

16:      int itsWeight;

17:      long itsNumberDaysAlive;

18: };

19:

20: int main // returns 1 on error

21: {

22:    char fileName[80];

23:

24:

25:    cout "Please enter the file name: ":

26:    cin fileName;

27:    ofstream fout(fileName,ios::binary);

28:    if (!fout)

29:    {

30:       cout "Unable to open " fileName " for writing.\n";

31:       return(1);

32:    }

33:

34:    Animal Bear(50,100);

35:    fout.write((char*) Bear,sizeof Bear);

36:

37:    fout.close;

38:

39:    ifstream fin(fileName,ios::binary);

40:    if (!fin)

41:    {

42:       cout "Unable to open " fileName " for reading.\n";

43:       return(1);

44:    }

45:

46:    Animal BearTwo(1,1);

47:

48:    cout "BearTwo weight: " BearTwo.GetWeight endl;

49:    cout "BearTwo days: " BearTwo.GetDaysAlive endl;

50:

51:    fin.read((char*) BearTwo, sizeof BearTwo);

52:

53:    cout "BearTwo weight: " BearTwo.GetWeight endl;

54:    cout "BearTwo days: " BearTwo.GetDaysAlive endl;

55:    fin.close;

56:    return 0;

57: }

Результат:

Please enter the file name: Animals

BearTwo weight: 1

BearTwo days: 1

BearTwo weight: 50

BearTwo days: 100

Анализ: В строках 3-18 объявляется класс Animal. В строках 22-32 создается файл, который открывается для вывода в двоичном режиме. В строке 34 создается объект Animal со значениями переменных-членов itsWeight = 50 и itsNumberDaysAlive = 100. В следующей строке данные объекта заносятся в файл.

В строке 37 файл закрывается, после чего повторно открывается для чтения в двоичном режиме в строке 39. Создается второй объект Animal, значения обоих переменных-членов которого равны 1. В строке 51 данные из файла считываются в новый объект Animal, замещая собой текущие значения объекта.

<p>Установка параметров ввода-вывода с помощью коммандной строки</p>

Многие операционные системы, такие как DOS и UNIX, позволяют пользователю выполнять установки некоторых параметров при запуске программы. Эти установки называются опциями командной строки и, как правило, отделяются друг от друга пробелами, например:

SomeProgram Param1 Param2 Param3

Перейти на страницу:

Похожие книги

Сущность технологии СОМ. Библиотека программиста
Сущность технологии СОМ. Библиотека программиста

В этой книге СОМ исследуется с точки зрения разработчика C++. Написанная ведущим специалистом по модели компонентных объектов СОМ, она раскрывает сущность СОМ, помогая разработчикам правильно понять не только методы модели программирования СОМ, но и ее основу. Понимание мотивов создания СОМ и ее аспектов, касающихся распределенных систем, чрезвычайно важно для тех разработчиков, которые желают пойти дальше простейших приложений СОМ и стать по-настоящему эффективными СОМ-программистами. Показывая, почему СОМ для распределенных систем (Distributed СОМ) работает именно так, а не иначе, Дон Бокс дает вам возможность применять эту модель творчески и эффективно для ежедневных задач программирования.

Дональд Бокс

Программирование, программы, базы данных / Программирование / Книги по IT