Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод указ к лабораторным работам ООП 3 семест...doc
Скачиваний:
5
Добавлен:
13.11.2019
Размер:
22.34 Mб
Скачать

1.2 Приклад програми Умова задачі

Скопіювати один файл у інший, визначити розмір вихідного файлу. Використати файли потоків.

Алгоритм задачі

  1. Увести ім’я вхідного файлу.

  2. Увести ім’я вихідного файлу.

  3. Скопіювати файли та визначити розмір вихідного файлу:

    1. Відкрити вхідний файловий потік.

    2. Якщо файл не існує, то вивести повідомлення.

    3. Інакше відкрити файловий потік для читання.

    4. Створити вихідний файловий потік.

    5. Якщо файл існує, то вивести повідомлення.

    6. Поки не кінець вхідного потоку, виконати такі дії:

      1. Зчитувати символ з потоку.

      2. Вивести символ на екран.

      3. Записати символ у вихідний потік;

  4. Вивести повідомлення про завершення копіювання.

  5. Визначити розмір вихідного файлу.

Текст програми

#include<iostream>

#include<stdio.h>

#include<fstream>

#include<string.h>

#include<conio.h>

#include<iomanip>

using namespace std;

ifstream f1; //файловий потік введення

ofstream f2; //файловий потік виведення

///// копіювання файлу, параметри - назви вхідного(source) файлу та файлу копії(dest) /////

int copyf(const char *source,const char *dest)

{ char c; //символ, що зчитується з файлу

f1.open(source,ios::in); //відкрити вхідний потік

if (!f1) //якщо файл не існує

{ cerr<<"Error in source file "<<source<<endl; return -1; } //вивести повідомлення

f2.open(dest,ios::out); //відкрити вихідний потік

if (!f2) //якщо потік відкрити неможливо

{cerr<<"File already exist "<<dest<<endl; return -1; }

while (f1) //поки не кінець вхідного потоку

{

f1.get(с); //зчитувати з потоку по одному символу

cout<<c; //вивести символ на екран

f2<<c; } //записати символ у вихідний потік

cout<<endl<<endl<<" 1 file copied "<<"\n"; //вивести повідомлення

//визначити обсяг вихідного файлового потоку

f2.seekp(0,ios::end); //розмістити покажчик у кінці файлу

long size=f2.tellp(); //визначити значення покажчика від початку області виведення

cout<<setw(10)<<"filesize "<<dest<<" "<<size<<" bytes\n";

//виведення розміру файлу з десятої колонки екрана

f1.close(); //закрити файли

f2.close();

return 1;

}

///////////////////////-------------------------------виведення файлу копії-----------------///////////////////

void readfile(const char *source)

{ char c;

ifstream f3(source,ios::in); //відкрити вхідний потік

while (f3) //поки не кінець вхідного потоку

{ f3.get(c); //зчитувати по одному символу

if (c!='\n') //не переводити курсор на новий рядок

cout<<setw(2)<<c<<" "<<hex<<c; //вивести символ на екран

else cout<<" ";

}

cout<<endl<<" file reading "<<endl;

}

/////////////////--------------------------------головна програма-------------------------///////////////////////

void main()

{

char s[50],d[50];

int rezult=-1;

while (rezult!=1)

{

cout<<"\n"<<"input source file :"; cin>>s; //ввести ім’я вхідного потоку

cout<<"\n"<<"input destination file :"; cin>>d; //ввести ім’я вихідного потоку

rezult=copyf(s, d); //скопіювати файл

}

readfile(d); //зчитувати файл копії

getchar();

}

Після запуску програми на екрані з’являються повідомлення та результати введення даних і розрахунків.