среда, 20 июля 2011 г.

С++ : Работа с файлами

Итак... Мы подошли с вами к очень интересной теме - работе с файлами. Она не очень тяжелая, просто надо разобраться , что такое файловый поток и с чем его едят. Лабораторная, даная мне для закрепления материала, оказалась простой. Вот задание и код:


/*
Лабораторная работа № 3

   Разработать алгоритм решения задачи обработки данных, хранящихся в бинарном
файле чисел или символов.
   Реализовать алгоритм на языке С++ с помощью функций с параметрами. Описать следующие функции:
1) функцию формирования файла (параметрами должны быть файловый поток и его имя);
2) функцию чтения файла (параметрами должны быть файловый поток и его имя);
3) функцию обработки файла (параметрами должны быть файловый поток и его имя).
   В главной функции должны быть реализованы объявления файловых потоков и вызов функций
работы с файлами.


   Условие задачи выбрать из файла Приложение 2_SP1.doc (Задача 1) по номеру в журнале.
Дан файл f, компоненты которого являются действительными числа-ми. Найти произведение компонент файла f.
*/

#include <iostream>
#include <fstream>
#include <stdlib.h>
using namespace std;
/////////////////////////////////////////////////////////////////////////////////////
// Функция создания файла.В качестве параметров передано имя файла и файловый поток
void createSFile(char* fileName, fstream &file){
       while(!file.is_open()) file.open(fileName,ios::out|ios::trunc|ios::binary);//открытие файла
       int x;
       cout << "Введите х(если х будет равен 9999, то ввод чисел закончится)= ";
       cin >> x;
      
while(x!=9999)
       {
             file.write((char*)&x, sizeof x); //цикл для записи в файл чисел с клавиатуры
             cout << "Число: ";
             cin >> x;
       }
       file.close();//закрытие файла
       cout << "Исходный файл \"" << fileName << "\" создан!" << endl;
}
////////////////////////////////////////////////////////////////////////////////////////
// функция выведдения содержимого файла на экран
void readSFile(char* fileName, fstream &file){
       file.open(fileName,ios::in|ios::binary);
       while(!file.is_open()){
             cout << "Ошибка открытия файла \"" << fileName << "\"!" << endl;
             exit(1);
       }

       if(file.eof()){//eof  - возвращает истину, если достигнут конец файла
             file.clear();// сбрасывает биты ошибок
             file.seekg(0);// указатель на начало файла
       }

       int number;
       while(file.read((char *) &number,sizeof(number))){//чтение числа
             cout << " " << number << " "; //и вывод его на экран
       }
       file.close();
       cout << endl << "Файл \"" << fileName << "\" прочитан!" << endl;
}
///////////////////////////////////////////////////////////////////////////////////////
//Функция умножения чисел , содержащихся в файле
void FileProcessing(char* sourceFileName, fstream &sFile){
       sFile.open(sourceFileName,ios::in|ios::binary);
      
       if(sFile.eof()){
             sFile.clear();
             sFile.seekg(0);
       }

       int number;
       int pr=1;
       while(sFile.read((char *) &number,sizeof(number))){
             pr=pr*number;
       }
       sFile.close();
       cout << "Произведение компонентов файла \"" << sourceFileName << "\" равно = "<<pr<< endl;
}

///////////////////////////////////////////////////////////////////////////////////////
void main()
{setlocale(LC_ALL,"Russian");
       char FsourceFileName[15];// создание массива смволов - названия файла
       fstream FsourceFile; // создание файлового потока
       cout << "ВВедите имя файла(максимум 15 символов): ";
       cin >> FsourceFileName;

       createSFile(FsourceFileName,FsourceFile);
       readSFile(FsourceFileName,FsourceFile);
       FileProcessing(FsourceFileName,FsourceFile);

       cin.get();
       cin.get();
}

Вот результат работы программки:



Комментариев нет:

Отправить комментарий