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

Автор работы: Пользователь скрыл имя, 04 Декабря 2016 в 00:02, курсовая работа

Описание работы

Язык программирования функционирует для двух целей:
он предоставляет программисту аппарат для воплощения в реальность определенных действий;
он формирует концепции, используемые программистом, когда тот размышляет о своих будущих действиях.

Файлы: 1 файл

курсовая Корниенко.doc

— 154.50 Кб (Скачать файл)

printf( "Wrote %d items\n", numwritten );

fclose( stream );

}

Else printf( "Problem opening the file\n" );

if( (stream = fopen( "fread.out", “rb” )) != NULL )

{

Numread = fread( list, sizeof( char ), 25, stream );

printf( "Number ofitems read = %d\n", numread );

printf( "Contents of buffer = ");

puts(list);

fclose( stream );

}

Else printf( "File could not be opened\n" );

return 0;

}

В данном примере массив list выступает в качестве буфера для вывода и ввода информации из бинарного файла. Сначала элементы буфера инициализируются буквами латинского алфавита от z до b, а затем записываются в файл с помощью функции fwrite(list, sizeof(char)‚ 25, stream). Здесь оператор sizeof (char) указывает размер элемента (буквы), а число 25 соответствует числу записываемых букв. Аналогичным образом осуществляется считывание информации из файла fread(list, sizeof (char), 25, stream), где в массив list помещаются 25 символов, хранящихся в файле. Функции fwrite() и fread() удобно использовать при сохранении данных структуры в файл. Запишем пример хранения информации по двум книгам в бинарном файле.

Пример 8. Пример сохранения структур в бинарном файле:

#include“stdafx.h”

#include“stdio.h”

#define N 2

struct book

{

char name[ 100];

char author[100];

int year;

}

books[N];

int main(void)

{

for(inti=0;i<N;i++)

{

scanf("%s",books[i].name);

scanf("%s",books[i].author);

scanf("%d",&books[i].year);

}

FILE* fp = fopen("my_fi1e.txt","wb");

fwrite(books, sizeof(books),1,fp);

fclose(fp);

fp = fopen("my7file.txt","rb");

fread(books,sizeothooks),1,fp);

fclose(fp);

printf(‘—————---—-————-------------———-------------—----\n”);

for(inti=0;i <N;i++)

{

puts(books[i].name);

puts(books[i].author);

printf("%d\n",books[i].year);

}

return 0;

}

В данном примере с помощью функции fwrite() целиком сохраняется массив books, состоящий из двух элементов, а оператор sizeof(books) определяет размер массива books. Аналогичным образом реализуется и функция fwrite(), которая считывает из файла сразу весь массив. По существу функции fwrite() и fread(), в данном примере, осуществляют копирование заданной области памяти в файл, а затем обратно. Это их свойство удобно использовать при хранении «сложных» форм Данных, когда простая поэлементная запись данных в файл становится трудоемкой или невозможной.

Следует отметить, что функция fopen() при открытии файла на запись уничтожает все данные из этого файла, если они были. Вместе с теми существует необходимость добавлять данные в файл, не уничтожая ранее записанную информацию. Это достигается путем открытия файла на добавление информации. В этом случае функции fopen() третьим аргументом передается строка “а” или “аb”, что означает открыть файл на добавление информации в его конец. Продемонстрируем работу данного режима на следующем примере.

Пример 9. Добавление информации в файл:

#include“stdafx.h”

#include“stdio.h”

#detine N 2

Struct book

{

Char name[100];

char auth0r[100];

int year;

}

books[N];

int main(void)

{

for(inti=0;i <N;i++)

{

scanf("%s",books[i].name);

scanf(“%s”,books[i].author);

scanf("%d",books[i].year);

}

FILE* fp = fopen("my_file.txt“,"wb");

fwrite(books[0], sizeof(tag_book),1,fp);

fclose(fp);

fp = fopen("my_file.txt","ab");

fwrite(books[1], sizeof(tag_book),l ,fp);

fclose(fp);

fp = fopen("my_file.txt","rb");

fread(books,sizeof(books),1,fp);

fclose(fp);

printf("—-——‘---------------——————————-----------------v\n");

for(i=0;i <N;i++)

{

puts(books[i].name);

puts(books[i].author);

printf(”%d\n",books[i].year);

}

return 0;

}

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

Когда стандартные функции возвращают ЕОF, это обычно означает что они достигли конца файла. Однако это также может означать ошибку ввода информации из файла. Для того чтобы различить эти две ситуации в языке С++ существую функции feof() и ferror(). Функция feof() возврат значение отличное от нуля, если достигнут конец файла и нуль в противном случае. Функция ferror() возвращает ненулевое значение, если произошла ошибка чтения или записи, и нуль – в противном случае. При использования данных функций представлен в примере 10.

Пример 10. Использование функции ferror():

#include“stdafx.h”

#include“stdio.h”

int main(void)

{

int count, total;

char buffer[100];

FILE *fp;

if((fp = fopen( "myifilelxt", "r" )) == NULL ) return 0;

while( !eof( fp ) )

{

count = fread( buffer, sizeof( char ), 100, fp );

if(ferror( fp ) )

{

perror( "Read error" );

break;

}

total += count;

}

printf( "Number of bytes read = %d\n“, total );

fclose(fp );

return 0;

}

В языке С++ имеются также функции remove() и remane() для удаления и переименования файлов. Их синтаксис следующий:

Int remove(constchar *path );

где * path – путь с именем удаляемого файла. Данная функция определена в библиотеках stdio.h и io.h, возвращает ноль при успешном удалении и -1 в противном случае.

Int rename(const char *oldname‚ const char *newname );

где *oldname – имя файла для переименования; *newname – новое имя файла. Данная функция определена в библиотеках stdio.h и io.h, возвращает ноль при успешном удалении и не ноль в противном случае.

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

 

Заключение

Язык программирования С++ является мощным и стремительным рывком в развитии программирования. С++ и по сей день занимает господствующее положение среди языков программирования в мире. Огромное множество профессиональных программистов использует именно его при разработке разного рода проектов. Очевидно, этот язык будет сохранять свое положение ещё не один год, при этом по-прежнему развиваясь и совершенствуясь.

В данной курсовой работе была достигнута следующая цель: раскрытие истории происхождения языка программирования C++ и работы с файлами в нем.

Для достижения цели были поставлены и достигнуты следующие задачи:

1. Сопоставить язык для программирования С++ с более ранним языком программирования С.

2. Раскрыть эффективность  и структуру языка программирования С++.

3. Привести пример работы с текстовыми файлами.

4. Привести пример работы с бинарными файлами.

Язык программирования C++ прошел немалый путь при разработке и последующих изменениях. И это имеет достаточно хороший результат, так как данный язык сейчас в приоритете над другими языками программирования, в связи с тем, что C++ является эффективным и структурированным, что облегчает работу программистам.

В данном языке программирования можно работать как с текстовыми файлами, так и с бинарными, что так же является положительным аспектом. Принцип работы с данными файлами, можно сказать, один, но есть различия в применении различных функций. В работе с бинарными файлами список функций гораздо шире, чем в работе с текстовыми. Но в целом, эти различии довольно несущественные.

Библиографический список

1. Бабэ Б. Просто и ясно о Borland С++. Версии 4.0 и 4.5. / Б. Беби. – М.: Бином – 2010. – 400с.

2. Вайнер Р. С++ изнутри. / Р. Вайнер, Л. Пинсон – Киев: Диасофт – 2013. – 304с.

3. Дейтел Х.М. Как программировать  на С++: перевод с английского. / Х.М. Дейтел, П.Д. Дейтел – М: Бином – 2013. – 1244с.

4. Дейтел Х.М. Как программировать  на С. / Х.М. Дейтел, П.Д. Дейтел – М.: Бином – 2014. – 912с.

5. Лукас П. С++ под рукой/П. Лукас – Киев: Диасофт – 2013. – 176с.

6. Либерти Д. Освой Самостоятельно  С++ за 24 часа. / Д. Либерти, Б. Давид – М.: Вильямс – 2007. – 234с.

7. Либерти Д. Освой С++ за 21 день. / Д. Либерти – М.: Вильямс – 2010. – 45-56с.

8. Павловская Т.А. С и  С++‚ Программирование на языке  высокого уровня. / Т.А. Павловская – СПб.: Питер – 2010. – 124с.

9. Павловская Т.А. С/С++. Программирование на языке высокого уровня: Учебник для вузов. / Т.А. Павловская – СПб.: Питер – 2013. – 464с.

10. Подбельский В.В. Язык  С++: Учебное пособие. / 8.8. O. Подбельский – М.: Финансы и статистика – 2011. – 600с.

11. Секунов Н. СамоучительУйзиа1С++ 6. / Н. Секунов – СПб.: БХВ-Петербург – 2011. – 234с.

12. Страуструп Б.: Язык программирования С++. / Б. Страуструп – М.: Бином – 2010. – 67–70с.

13. Страуструп Б. Язык программирования  С++. / Б. Страуструп – Киев: Диасофт – 2011. – 900с.

14. Хомоненко А.Д. Программирование на С++. / А.Д. Хомоненко – СПб.: КОРОНА – 2013. – 512с.

15. Эккель Б. Философия С++. Введение в стандартный С. / Б. Эккель –СПб.: Питер – 2014. – 572с.

16. Эккель Б. Философия  С++. Практическое программирование. С. / Б. Эккель – СПб.: Питер – 2014. – 608с.

 

 

1 Страуструп Б. Язык программирования С++. / Б. Страуструп – Киев: Диасофт – 2011. – С.15–25.

2Дейтел Х.М. Как программировать на С. / Х.М. Дейтел, П.Д. Дейтел – М.: Бином – 2014. – C.58–65.

3 Секунов Н. СамоучительУйзиа1С++ 6. / Н. Секунов – СПб.: БХВ-Петербург – 2011. – С.148.

4 Лукас П. С++ под рукой/П. Лукас – Киев: Диасофт – 2013. – С.176.

5Либерти Д. Освой Самостоятельно С++ за 24 часа. / Д. Либерти, Б. Давид – М.: Вильямс – 2007. – С.152.

6 Лукас П. С++ под рукой/П. Лукас – Киев: Диасофт – 2013. – С.176.


Информация о работе Работа с файлами в С++