Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Прямой доступ к файлам




Рассмотренные ранее средства обмена с файлами позволяют записывать и считывать данные только последовательно. Операции чтения/записи всегда производятся, начиная с текущей позиции в потоке. Начальная позиция устанавливается при открытии потока и может соответствовать начальному или конечному байту потока в зависимости от режима открытия файла. При открытии потока в режимах “r” и “w” указатель текущей позиции устанавливается на начальный байт потока, при открытии в режиме “a” - за последним байтом в конец файла. При выполнении каждой операции указатель перемещается на новую текущую позицию в соответствии с числом записанных/прочитанных байтов.

Средства прямого доступа дают возможность перемещать указатель текущей позиции в потоке на нужный байт. Для этого используется функция

int fseek(FILE *f, long off, int org), где

FILE *f - – указатель на файл,

long off – позиция смещения

int org – начало отсчета.

Смещение задается выражение или переменной и может быть отрицательным, т. е. возможно перемещение как в прямом, так и в обратном направлениях. Начало отсчета задается одной из определенных в файле <stdio.h> констант:

SEEK_SET ==0 – начало файла;

SEEK_CUR==1 – текущая позиция;

SEEK_END ==2 – конец файла.

Функция возвращает 0, если перемещение в потоке выполнено успешно, иначе возвращает ненулевое значение.

Примеры:

fseek(f,0L,SEEK_SET); //перемещение к началу потока из текущей позиции

fseek(f,0L,SEEK_END); //перемещение к концу потока из текущей позиции

fseek(f,-(long)sizeof(a),SEEK_SET); //перемещение назад на длину переменной а.

Кроме этой функции, для прямого доступа к файлу используются:

long tell(FILE *f);//получает значение указателя текущей позиции в потоке;

void rewind(FILE *f);//установить значение указателя на начало потока.

 

Удаление и добавление элементов в файле

Пример 1:

void del(char *filename)

{

//удаление записи с номером х

FILE *f, *temp;

f=fopen(filename,”rb”);//открыть исходный файл для чтения

temp=fopen(“temp”,”wb”)//открыть вспомогательный файл для записи

student a;

for(long i=0;.fread(&a,sizeof(student),1,f);i++)

if(i!=x)

{

fwrite(&a,sizeof(student)1,temp);

}

else

{

cout<<a<<" - is deleting...";

}

fclose(f); fclose(temp);

remove(filename);

rename(“temp”, filename);

}

Пример 2:

void add(char *filename)

{

//добавление в файл

student a;

int n;

f=fopen(filename,”ab”)открыть файл для добавления

cout<<"\nHow many records would you add to file?";

cin>>n;

for(int i=0;i<n;i++)

{

прочитать объект

fwrite(&a,sizeof(student),1,f);//записать в файл

}

fclose(f);//закрыть файл

 

}


Вопросы к экзамену.

1. Алгоритм и его свойства. Способы записи алгоритма. Программа. Языки программирования. Примеры алгоритмов и программ.

2. Структура программы на языке С++. Примеры. Этапы создания исполняемой программы.

3. Состав языка С++. Константы и переменные С++.

4. Типы данных в С++.

5. Выражения. Знаки операций.

6. Основные операторы С++ (присваивание, составные, выбора, циклов, перехода). Синтаксис, семантика, примеры

7. Этапы решения задачи. Виды ошибок. Тестирование.

8. Массивы (определение, инициализация, способы перебора).

9. Сортировка массивов (простой обмен, простое включение, простой выбор).

10. Поиск в одномерных массивах (дихотомический и линейный).

11. Указатели. Операции с указателями. Примеры

12. Динамические переменные. Операции new и delete. Примеры.

13. Ссылки. Примеры.

14. Одномерные массивы и указатели. Примеры.

15. Многомерные массивы и указатели. Примеры.

16. Динамические массивы. Примеры.

17. Символьная информация и строки. Функции для работы со строками (библиотечный файл string.h).

18. Функции ввод-вывода (scanf(), printf(), puts(), gets(), putchar(),getchar()).

19. Функции в С++. Формальные и фактические параметры. Передача параметров по адресу и по значению. Локальные и глобальные переменные. Примеры.

20. Прототип функции. Библиотечные файлы. Директива препроцессора #include.

21. Передача одномерных массивов в функции. Примеры.

22. Передача многомерных массивов в функции. Примеры.

23. Передача строк в функции. Примеры.

24. Функции с умалчиваемыми параметрами. Примеры.

25. Подставляемые функции. Примеры.

26. Функции с переменным числом параметров. Примеры.

27. Перегрузка функции. Шаблоны функций. Примеры.

28. Указатели на функции. Примеры.

29. Ссылки на функции. Примеры.

30. Типы данных, определяемые пользователем (переименование типов, перечисление, структуры, объединения). Примеры.

31. Структуры. Определение, инициализация, присваивание структур, доступ к элементам структур, указатели на структуры, битовые поля структур.

32. Динамические структуры данных (однонаправленные и двунаправленные списки).

33. Создание списка, печать, удаление, добавление элементов (на примере однонаправленных и двунаправленных списков).

34. Потоковый ввод-вывод в С++. Открытие и закрытие потока. Стандартные потоки ввода-вывода.

35. Символьный, строковый, блоковый и форматированный ввод-вывод.

36. Прямой доступ к файлам.

37. Создание бинарных и текстовых файлов, удаление, добавление, корректировка элементов, печать файлов.

 

 


Поделиться:

Дата добавления: 2015-01-29; просмотров: 88; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.008 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты