Если при открытии потока возникла ошибка диск заполнен при записи то указатель на поток приобретет

Прежде
чем начать работать с потоком, его
необходимо инициализировать, т.е.
открыть. При этом поток связывается в
исполняемой программе со структурой
предопределенного типа FILE.
Определение
структурного типа FILE
находится
в заголовочном файле stdio.h.
В
структуре FILE
содержатся
компоненты, с помощью которых ведется
работа с потоком, в частности: указатель
на буфер, указатель (индикатор) текущей
позиции в потоке и другая информация.

При
открытии потока в программу возвращается
указатель на поток, являющийся указателем
на объект структурного типа FILE.
Этот
указатель идентифицирует поток во всех
последующих операциях.

Указатель
на поток, например fp,
должен быть объявлен в программе
следующим образом:

Указатель на поток
приобретает значение в результате
выполнения функции открытия потока:

fp
= fopen
(имя_файпа,
режим_открытия);

Параметры
имя_файла
и
режим_открытия
являются
указателями на массивы символов,
содержащих соответственно имя файла,
связанного с потоком, и строку режимов
открытия. Однако эти параметры могут
задаваться и непосредственно в виде
строк при вызове функции открытия файла:

где
t.
txt
— имя некоторого файла, связанного с
потоком;

r
— обозначение одного из режимов работы
с
файлом
(тип доступа к потоку).

Стандартно файл,
связанный с потоком, можно открыть в
одном из следующих шести режимов:

«w«
-новый текстовый (см. ниже) файл открывается
для записи. Если файл уже существовал,
то предыдущее содержимое стирается,
файл создается заново;

«r»
— существующий текстовый файл открывается
только для чтения;

«а»
— текстовый файл открывается (или
создается, если файла нет) для добавления
в него новой порции информации (добавление
в конец файла). В отличие от режима «w»
режим «а» позволяет открывать уже
существующий файл, не уничтожая его
предыдущей версии, и писать в продолжение
файла;

«w
новый текстовый файл открывается для
записи и последующих многократных
исправлений. Если файл уже существует,
то предыдущее содержимое стирается.
Последующие после открытия файла запись
и чтение из него допустимы в любом месте
файла,
в том числе запись разрешена и в конец
файла, т.е. файл может увеличиваться
(«расти»);

«r+»
— существующий текстовый файл открывается
как для чтения, так и для записи в любом
месте файла; однако в этом режиме
невозможна запись в конец файла, т.е.
недопустимо увеличение размеров файла;

«а+»
текстовый файл открывается или создается
(если файла нет) и становится доступным
для изменений, т.е. для записи и для
чтения в любом месте; при этом в отличие
от режима «w+»
можно открыть существующий файл и не
уничтожать его содержимого; в отличие
от режима «r+» в режиме «а+»
можно вести запись в конец файла, т.е.
увеличивать его размеры.

Поток можно открыть
в текстовом либо двоичном (бинарном)
режиме.

В
текстовом режиме прочитанная из потока
комбинация символов CR
(значение 13) и LF
(значение 10), то есть управляющие коды
«возврат каретки» и «перевод
строки», преобразуется в один символ
новой строки ‘n’ (значение 10, совпадающее
с LF).
При записи в поток в текстовом режиме
осуществляется обратное преобразование,
т.е. символ новой строки ‘n’
(LF)
заменяется последовательностью CR
и LF.

Если
файл, связанный с потоком, хранит не
текстовую, а произвольную двоичную
информацию, то указанные преобразования
не нужны и могут быть даже вредными.
Обмен без такого преобразования
выполняется при выборе двоичного или
бинарного режима, который обозначается
буквой b.
Например, «r+b»
или «wb«.
В некоторых компиляторах текстовый
режим обмена обозначается буквой t,
т.е. записывают «a+t»
или «rt«.

Если поток открыт
для изменений, т.е. в параметре режима
присутствует символ «+», то разрешены
как вывод в поток, так и чтение из него.
Однако смена режима (переход от записи
к чтению и обратно) должна происходить
только после установки указателя потока
в нужную позицию (см. §7.1.3).

При
открытии потока могут возникнуть
следующие ошибки: указанный файл,
связанный с потоком, не найден (для
режима «чтение»); диск заполнен или
диск защищен от записи и т.п. Необходимо
также отметить, что при выполнении
функции fopen(
)
происходит выделение динамической
памяти. При ее отсутствии устанавливается
признак ошибки «Not
enough
memory»
(недостаточно памяти). В перечисленных
случаях указатель на поток приобретает
значение NULL.
Заметим,
что указатель на поток в любом режиме,
отличном от аварийного, никогда не
бывает равным NULL.

Приведем
типичную последовательность операторов,
которая используется при открытии
файла, связанного с потоком:

где
NULL

нулевой указатель, определенный в файле
stdio.h.

Для
вывода на экран дисплея сообщения об
ошибке при открытии потока используется
стандартная библиотечная функция
реггог(
),
прототип которой в stdio.h
имеет
вид:

Функция
perror(
)
выводит строку символов, адресуемую
указателем s,
за которой размещаются: двоеточие,
пробел и сообщение об ошибке. Содержимое
и формат сообщения определяются
реализацией системы программирования.
Текст сообщения об ошибке выбирается
функцией реrror()
на
основании номера ошибки. Номер ошибки
заносится в переменную int
errno
(определенную
в заголовочном файле errno.h)
рядом
функций библиотеки языка Си, в том числе
и функциями ввода-вывода.

После
того как файл открыт, с ним можно работать,
записывая в него информацию или считывая
ее (в зависимости от режима).

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

int
fclose
(указатель_на_поток
);

Открытый
файл можно открыть повторно (например,
для изменения режима работы с ним) только
после того, как файл будет закрыт с
помощью функции fclose(
).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

int
2. Если связанный с потоком файл, который открывается в режиме открытия w+, уже существует, то …

информация из него не стирается, можно выполнять запись в конец файла
3. …-это процесс уменьшения значения переменной

инкрементация
4. В языке C++ рекомендуется первоначально использовать при написании программ …

цифры и буквы (строчные и прописные)
5. Перемещение указателя на произвольную файловую позицию происходит с помощью функции fseek, которая записывается как int fseek(FILE *f, long off, int org); где FILE *f- это …

начало отсчета
6. Если объявление глобальных переменных происходит в основной программе, то во время ее работы значения глобальных переменных записываются в область памяти, называемую …

Тип ответа: Одиночный выбор
сегментом данных (статический сегмент) и доступны постоянно на протяжении всей работы программы

сегментом данных (статический сегмент) и доступны только во время работы функции, в которой они описаны

стеком и доступны постоянно на протяжении всей работы программы
7. Идентификаторы — это …

Тип ответа: Одиночный выбор
высказывания, относительно которых можно сказать истинно оно или ложно

имена переменной константы, процедур, функций и т. д.

атомарная часть C++ программы, которой можно поставить в соответствие предложение естественного языка
8. B C++ тип данных bool — это …

тип с плавающей запятой наименьшего размера
9. B C++ циклическая алгоритмическая управляющая структура с параметром записывается как …

Тип ответа: Одиночный выбор
двумерный массив всегда подвергается изменению сразу весь, целиком

нельзя подвергать изменению целиком весь массив сразу
11. Директива #include включает в программу содержимое указанного файла, имя которого может быть указано двумя способами, в частности: …

12. Описание формальных параметров алгоритма функции происходит …

Тип ответа: Одиночный выбор
только два раза

неограниченное количество раз

только один раз
13. Квадратные матрицы — это такие матрицы, у которых …

Тип ответа: Одиночный выбор
все элементы матрицы равны нулю

число элементов в строке равно числу элементов в столбце, т. е. M = N

число элементов в строке/столбце зависит от того, в каком столбце/строке оно содержится

не все ячейки заполнены элементами
14. Чтобы текст программы в C++ был более понятным, рекомендуется придерживаться общепринятых соглашений об именах объектов, в частности, если имя состоит из нескольких слов (например, first index), принято …

Тип ответа: Множественный выбор
разделять слова символом подчеркивания (firs_index)

писать каждое следующее слово с большой буквы (FirstIndex)

писать через пробел (first index)

писать слитно строчными буквами (firstindex)
15. Имена формальных и фактических параметров …

Тип ответа: Одиночный выбор
не могут совпадать

могут совпадать, но это отразится на выполнении программы

могут совпадать и это не отразится на выполнении программы, но может привести к проблемам при понимании алгоритма работы
16. В C++ оператор … высвобождает выделенную память
delete

&

new
17. К основным типам языка в C++ относится … — тип с плавающей запятой, повышенной точности

Тип ответа: Одиночный выбор
char

bool

double

_wchar_t

float

int
18. Если произвести единичный циклический сдвиг элементов массива вправо, то …

Тип ответа: Одиночный выбор
будет происходить перемещение содержимого последней ячейки в первую

будет происходить перемещение содержимого первой ячейки в последнюю

будет создана дополнительная ячейка
19. Файл — это …

Тип ответа: Одиночный выбор
именованная область на внешнем информационном носителе (диске), содержащая данные

перенос данных

специальное место на компьютерном носителе информации
20. Идентификаторы, описанные в функции, являются локальными для нее, если …

Тип ответа: Одиночный выбор
работа с ними возможна только внутри этой функции и внутри вложенных в нее блоков

они могут быть использованы в любом модуле, стоящем ниже на иерархической лестнице

они могут быть использованы в исполнительной части самого модуля
21. Файл, связанный с потоком, в режиме открытия, а открывается для …

Тип ответа: Одиночный выбор
чтения

записи

добавления

чтения и записи (но это не точно)
22. Параметры-переменные используются для передачи … значений функций

Тип ответа: Одиночный выбор
выходных

входных

входных и выходных
23. Строковые данные можно складывать друг с другом (например, при сложении строк «Hello», и «world!» получится строка «Hello, world!»), и такая операция над строками будет называться …

Тип ответа: Одиночный выбор
инкрементацией

конкатенацией

инициализацией

итерацией
24. Для того чтобы в программе описать переменную типа одномерный массив, нужно записать:…

Тип ответа: Одиночный выбор
<тип> <имя_массива>[<инициализатор>]

массива

<индекс> <имя_массива>
25. Директивы препроцессора начинаются со знака который должен быть самым первым символом строки

Тип ответа: Одиночный выбор
«амперсанд» (&)

«правый слеш» («/»)

«диез» (#)

«плюс» (+)
26. Функция обработки строковых данных islower(c) возвращает значение true, если с является …, и false в других случаях

Тип ответа: Одиночный выбор
буквой нижнего регистра

буквой верхнего регистра

буквой или цифрой

цифрой

пробелом
27. Начало однострочного комментария в C++ обозначается комбинацией …

Тип ответа: Одиночный выбор
«//»

«#»

«*/»

«?»

«&»
28. Функция обработки строковых данных strcat (s1, s2)…

Тип ответа: Одиночный выбор
выполняет побайтное копирование п символов из строки s2 в строку s1. возвращает значения s1

сравнивает строку s1 со строкой s2 и возвращает результат типа ɪnt: 0 — если строки эквивалентны, >0 — если s1 < s2, <0 — если s1 > s2

определяет длину указанной строки, без учета нуль-символа

объединяет строку s2 со строкой s1, результат сохраняется в s1
29. Наиболее естественными объектами, которые принято хранить в двумерных массивах, являются …

Тип ответа: Одиночный выбор
числа

латинские буквы

символы
30. Идентификаторы могут состоять …

Тип ответа: Одиночный выбор
только из арифметических знаков +, *, /

как из цифр, так и из специальных символов #, $, Л, &

только из букв латиницы, цифр и символа «_»
31. B C++ все файлы … последовательность байтов

Тип ответа: Одиночный выбор
могут рассматриваться или как структурированная, или как неструктурированная

рассматриваются как структурированная

рассматриваются как неструктурированная
32. Диапазон типа данных float-…

Тип ответа: Одиночный выбор
1 байт

2 байта

4 байта

8 батов
33. B C++ циклическая алгоритмическая управляющая структура с постусловием записывается как

Тип ответа: Одиночный выбор
while

for

do

34. Говоря об одномерных массивах, можно утверждать, что …

Тип ответа: Множественный выбор
массив — переменная сложной структуры и потому не может быть подвергнута обработке целиком

массив может быть подвергнут обработке целиком

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

Тип ответа: Одиночный выбор
циклического сдвига вправо

циклического сдвига влево

как циклического сдвига вправо, так и циклического сдвига влево
36. Говоря об алгоритмах подсчета суммы и произведения элементов массива, можно утверждать, что накопление суммы начинают с…

Тип ответа: Одиночный выбор
нуля, а произведения — с единицы

единицы, а произведения — с нуля

нуля, как и произведения

единицы, как и произведения
37. В языке C++ блок комментариев (условный вид блоков программ) выделяется сочетанием символов …

Тип ответа: Одиночный выбор
«/*» — начало комментария и «*/» — конец комментария

«*/»- начало комментария и «/*» — конец комментария

«//»- начало комментария и «//» — конец комментария

«#»- начало комментария и «/*» — конец комментария
38. Если доступ к элементам многомерных массивов осуществляется с помощью индексированных переменных а[1] [1], то доступ к этому же элементу с помощью указателей будет …

Тип ответа: Одиночный выбор
*(*(a+1)+1)

a[1,1]

a|1||1|

*(a+1)+1

a[1::1]
39. Для создания переменных, которые доступны во всех файлах программы, используется класс памяти …

Тип ответа: Одиночный выбор
auto

extern

static

register
40. Локальные данные записываются в область памяти, называемую …

Тип ответа: Одиночный выбор
сегментом данных (статический сегмент) и доступны постоянно на протяжении всей работы программы

стеком и доступны только во время работы функции, в которой они описаны

сегментом данных (статический сегмент) и доступны только во время работы функции, в которой они описаны

стеком и доступны постоянно на протяжении всей работы программы
41. Выходные параметры — это …

Тип ответа: Одиночный выбор
текущие данные для функции

результат работы функции

исходные данные для функции

набор данных, в обработке которых и заключается предназначение алгоритма

параметры, переданные по ссылке без права их изменения
42. Изменить режим работы с файлом …

Тип ответа: Одиночный выбор
можно только после закрытия файла

невозможно

можно только во время работы с файлом
43. Разреженные матрицы — это такие матрицы, у которых …

Тип ответа: Одиночный выбор
все элементы матрицы равны нулю

число элементов в строке равно числу элементов в столбце, т. е. M = N

число элементов в строке/столбце зависит от того, в каком столбце/строке оно содержится

не все ячейки заполнены элементами
44. … массив — это одномерный массив, каждым элементом которого является свои одномерный массив, или, иначе говоря, это такой тип данных, элементы которого однотипны и каждый из них характеризуется уникальной парой чисел: индексом строки и индексом столбца
Двумерный массив

45. Под произвольным доступом к компонентам файла понимается работа с файлом с возможностью произвольного перемещения …

Тип ответа: введите ответ
указателя.

  1. В С++ все файлы … последовательность байтов

Все файлы рассматриваются как не структурированная последовательность байтов

  1. В С++ имя функции, возвращающей не-void, … от операции присваивания

Всегда имя функции ставится справа от операции присваивания.

  1. В С++ каждый индекс пишется в …

в С++ каждый индекс пишется в собственных квадратных скобках.

  1. В С++ класс памяти определяет … переменной

Класс памяти определяет время жизни и область видимости переменной.

  1. В С++ компилятор может работать с переменными разных типов, т.е. если присвоить целочисленной переменной значение вещественной переменной, то будет присвоена только целая часть и …

произойдет неявное преобразование типов данных.

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

Операция new выделяет память из области свободной памяти,

  1. В С++ оператор … высвобождает выделенную память

а операция delete высвобождает выделенную память.

  1. В С++ тип данных категории void …

Типом void описывается пустой набор значений. Задание переменных типа void невозможно. Этот тип служит в основном для объявления функций, не возвращающих значения, или универсальных указателей на нетипизированные или произвольно типизированные данные.

  1. В C++ циклическая алгоритмическая управляющая структура с предусловием записывается как …

While

  1. Для доступа к компонентам файла …

используется указатель, в отличие от индекса в массиве

  1. Для использования способа передачи входных данных, являющихся сложными структурированными переменными, в списке формальных параметров перед параметром-константой ставится префикс …

Const

  1. Для использования способа передачи выходных значений функций, в списке формальных параметров перед параметром-переменной ставится префикс …

&

//

#

Const

  1. Вопрос: Для обработки элементов двумерного массива, на строки которого накладываются некоторые условия, требуется при просмотре этого массива внутрь циклов ставить условие на …

Тип ответа: Одиночный выбор
элемент

элемент либо индекс строки (в зависимости от условия задачи)

индекс строки или столбца (в зависимости от условия задачи)

  1. Если возникает потребность в обращении к переменной при коллизии имен, то следует вначале указать название модуля (модуль основной программы), а далее через … – имя переменной (или иной идентификатор, к которому нужно обратиться)

двойное двоеточие

  1. Если нужно скопировать элементы массива B в массив A, …

Пусть, например, нужно скопировать элементы массива B в массив A. Самый простой, как покажется, следующий способ: просто взять и присвоить один массив другому, т. е. A=B.

  1. Если при открытии потока возникла ошибка – диск заполнен (при записи), то указатель на поток приобретет …

При открытии потока могут возникать следующие ошибки:

— файл, связанный с потоком не найден (при чтении из файла);

— диск заполнен (при записи); 209

— диск защищен от записи (при записи) и т. п.

В этих случаях указатель на поток приобретет значение NULL (0).

  1. Если элементами одномерного массива является простой числовой тип данных, то такие массивы называют …

Тип ответа: введите ответ
Векторами

  1. есть процесс записи значений переменных на каждом шаге работы программы

Трассировка

  1. Имена переменных констант, процедур, функций и т. д. называются …

идентификаторами

компиляторами

операторами

типами данных

  1. К унарным операциям относят …

Бинарными называют операции, для выполнения которых необходимо два операнда, унарными – один

  1. Операции new и delete …, так как выделяемая память после ее использования должна высвобождаться

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

  1. Описание переменной может быть выполнено …

или как объявление, или как определение.

  1. память – это память, выделяемая программе для ее работы за вычетом сегмента данных, стека, в котором размещаются локальные переменные подпрограмм, и собственно тела программы

Динамическая память

  1. параметры – это локальные переменные, необходимые для описания алгоритма функции, они описываются в ее заголовке и используются в ее определении

Формальные параметры

  1. Параметры-константы – это параметры, …

Параметры константы – параметры, переданные по ссылке без права их изменения.

  1. Переменные класса памяти register аналогичны …, но память под них выделяется в регистрах процессора

auto

  1. Процесс задания некоторой переменной первичного значения называется …

Тип ответа: введите ответ
инициализацией.

  1. Согласно правилам описания перегруженных функций, …

Правила описания перегруженных функций:

1) Перегруженные функции должны находиться в одной области видимости.

2) Перегруженные функции могут иметь параметры по умолчанию, при этом значения одного и того же параметра в разных функциях должны совпадать.

3) В разных вариантах перегруженных функций может быть разное количество умалчиваемых параметров.

4) Функции не могут быть перегружены, если описание их параметров отличается только модификатором const или наличием ссылки.

  1. Сопоставьте знаки унарных операций в С++ и описания операций:

  1. Укажите пример объявления указателя:

  1. Укажите пример правильного синтаксиса цикла for :

  1. … – это массив, элементами которого служат массивы

Тип ответа: введите ответ
матрица

Аннотация: В лекции рассматриваются понятия и определения файлов и потоков, классификация файлов, стандартные функции по работе с файлами, основные алгоритмы работы с файлами, приводятся примеры решения задач на организацию ввода-вывода и обработку данных в файлах.

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

Файл – это именованная область внешней памяти, в которой хранится логически завершенный объем данных. Файл имеет следующие характерные особенности:

  • имеет имя на диске, что дает возможность программам идентифицировать и работать с несколькими файлами;
  • длина файла ограничивается только емкостью диска.

Часто бывает необходимо ввести некоторые данные из файла или вывести результаты в файл. Например, бывает необходимо обрабатывать массивы, которые слишком велики, чтобы полностью разместиться в памяти.

Файлы делятся на текстовые и двоичные.

Текстовый файл – это файл, в котором каждый символ из используемого набора символов хранится в виде одного байта (кода, соответствующего символу). Текстовые файлы разбиваются на несколько строк с помощью специального символа «конец строки». Текстовый файл заканчивается специальным символом «конец файла«.

Двоичный файлфайл, данные которого представлены в бинарном виде. При записи в двоичный файл символы и числа записываются в виде последовательности байт (в своем внутреннем двоичном представлении в памяти компьютера).

Особенностью языка С++ является отсутствие в нем структурированных файлов. Все файлы рассматриваются как неструктурированная последовательность байтов. При таком подходе понятие файла распространяется и на различные устройства.

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

  • потоковый ввод-вывод;
  • ввод-вывод нижнего уровня;
  • ввод-вывод для консоли и портов (зависит от ОС).

Поток – это абстрактное понятие, относящееся к любому переносу данных от источника к приемнику.

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

Чтение данных из потока называется извлечением, вывод в потокпомещением (включением).

Поток определяется как последовательность байтов и не зависит от конкретного устройства, с которым производится обмен (оперативная память, файл на диске, клавиатура или принтер). Обмен с потоком для увеличения скорости передачи данных производится, как правило, через специальную область оперативной памяти – буфер. Буфер накапливает байты, и фактическая передача данных выполняется после заполнения буфера (
рис.
19.1). При вводе это дает возможность исправить ошибки, если данные из буфера еще не отправлены в программу.

Буферизация данных при работе с потоками

Рис.
19.1.
Буферизация данных при работе с потоками

При работе с потоком можно:

  • открывать и закрывать потоки (связывать указатели на поток с конкретными файлами);
  • вводить и выводить строку, символ, форматированные данные, порцию данных произвольной длины;
  • анализировать ошибки ввода-вывода и достижения конца файла;
  • управлять буферизацией потока и размером буфера;
  • получать и устанавливать указатель текущей позиции в файле.

Когда программа начинает выполняться, автоматически открываются пять потоков, из которых основными являются:

  • стандартный поток ввода (на него ссылаются, используя предопределенный указатель на поток stdin );
  • стандартный поток вывода ( stdout );
  • стандартный поток вывода сообщений об ошибках ( stderr ).

По умолчанию стандартному потоку ввода stdin ставится в соответствие клавиатура, а потокам stdout и stderr соответствует экран монитора.

В С++ операции с файлами можно осуществлять в двух режимах: форматированном и потоковом.

Рассмотрим основные функции для работы с файлами в форматированном режиме.

Функция открытия файла

Для работы с файлом в языке C++ необходима ссылка на файл. Для определения такой ссылки существует структура FILE, описанная в файле stdio.h. Данная структура содержит все необходимые поля для управления файлами, например: текущий указатель буфера, текущий счетчик байтов, базовый адрес буфера ввода-вывода, номер файла.

При открытии файла (потока) в программу возвращается указатель на поток (файловый указатель), являющийся указателем на объект структурного типа FILE. Этот указатель идентифицирует поток во всех последующих операциях.

Например:

#include<stdio.h>
..............
FILE *fp;

Для открытия файла существует функция fopen, которая инициализирует файл.

Синтаксис:

fp=fopen(ИмяФайла, РежимОткрытия);

где fpуказатель на поток (файловый указатель);

ИмяФайлауказатель на строку символов, представляющую собой допустимое имя файла, в которое может входить спецификация файла (включает обозначение логического устройства, путь к файлу и собственно имя файла);

РежимОткрытияуказатель на строку режима открытия файла.

Например:

Существуют несколько режимов открытия файлов.

Режимы открытия файлов

Режим Описание Начинается с…
r Открывает текстовый файл для чтения. Если файл не существует, то выдается ошибка при исполнении программы. начала
w Открывает текстовый файл для записи. Если файл не существует, то он создается. Если файл уже существует, то удаляется его содержимое, файл перезаписывается начала
a Открывает текстовый файл для добавления. Если файл не существует, то он создается. Если существует, то содержимое из него не удаляется. конца
r+ Открывает текстовый файл для чтения и записи. Изменить размер файла нельзя. Если файл не существует, то выдается ошибка при исполнении программы. начала
w+ Открывает текстовый файл для чтения и записи. Если файл не существует, то он создается. Если файл уже существует, то удаляется его содержимое, файл перезаписывается. начала
a+ Открывает текстовый файл для чтения и записи. Если файл не существует, то он создается. Если существует, то содержимое из него не удаляется. конца
rb Открывает двоичный файл для чтения. Если файл не существует, то выдается ошибка при исполнении программы. начала
wb Открывает двоичный файл для записи. Если файл не существует, то он создается. Если файл уже существует, то удаляется его содержимое, файл перезаписывается. начала
ab Открывает двоичный файл для добавления. Если файл не существует, то он создается. Если существует, то содержимое из него не удаляется. конца
r+b Открывает двоичный файл для чтения и записи. Изменить размер файла нельзя. Если файл не существует, то выдается ошибка при исполнении программы. начала
rb+
w+b Открывает двоичный файл для чтения и записи. Если файл не существует, то он создается. Если файл уже существует, то удаляется его содержимое, файл перезаписывается. начала
wb+
a+b Открывает двоичный файл для чтения и записи. Если файл не существует, то он создается. Если существует, то содержимое из него не удаляется. конца
ab+

Поток можно открыть в текстовом ( t ) или двоичном ( b ) режиме. По умолчанию используется текстовый режим. В явном виде режим указывается следующим образом:

«r+b» или «rb» – двоичный (бинарный) режим;

«r+t» или «rt»текстовый режим.

В файле stdio.h определена константа EOF, которая сообщает об окончании файла (отрицательное целое число).

При открытии файла могут возникать следующие ошибки:

  • файл, связанный с потоком не найден (при чтении из файла);
  • диск заполнен (при записи);
  • диск защищен от записи (при записи) и т. п.

В этих случаях указатель на поток приобретет значение NULL (0). Указатель на поток, отличный от аварийного, не бывает равен NULL.

Для вывода сообщения об ошибке при открытии файла используется стандартная библиотечная функция из файла <stdio.h>:

void perror (const char*s);

Функция perror() выводит строку символов, адресуемую указателем s, за которой размещаются: двоеточие, пробел и сообщение об ошибке. Содержимое и формат сообщения определяются реализацией системы программирования.

Пример 1. Обнаружение и вывод ошибки при открытии файла.

#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[]){
  FILE *fp;
  if ((fp=fopen("t.txt", "r"))==NULL)
    // выводит строку символов с сообщением об ошибке
    perror("ошибка при открытии файла"); 
  system("pause");
  return 0;
}

Перед началом выполнения операций с файлами целесообразно получить подтверждение, что функция fopen() выполнилась успешно.

  • Если при операции произошла врачебная ошибка что делать
  • Если при межевании земельного участка допущены ошибки
  • Если при заполнении трудовой книжки сделана ошибка
  • Если при заполнении трудовой книжки допущена ошибка
  • Если при заполнении приходного кассового ордера допущена ошибка то она