Подготовка файла к работе.

Для открытия файлов может использоваться функция fopen, которая в случае удачного завершения возвращает целочисленный положительный идентификатор файла f_id (называемый также номером файла). В простейшем варианте вызова указывается единственный входной аргумент – имя открываемого файла:

f_id=fopen('name_file');

В качестве открываемого файла может быть задано короткое имя, и тогда система пытается его отыскать сначала в рабочем каталоге, а затем осуществляет поиск во всех каталогах, доступных MATLAB. При задании полной спецификации поиск производится лишь в указанном каталоге. В случае неудачи возвращаемое значение равно -1. Для получения дополнительной информации, поясняющей причину ошибки при открытии файла, к фукнции fopen можно обратиться с двумя выходными параметрами:

[f_id err_txt]=fopen('name_file');

В случае ошибки в переменную err_txt будет занесено соответствующее сообщение. Если указанный файл обнаружен, то он открывается для чтения как бинарный файл.

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

Таблица 2.31.1. Варианты вызова функции fopen.

Формат вызова Выполняемое действие
fopen('name_file','r') Открывается существующий бинарный файл для чтения
fopen('name_file','rt') Открывается существующий текстовый файл для чтения
fopen('name_file','r+') Открывается существующий бинарный файл, который может использоваться как для чтения, так и для записи (новый файл при этом не создается)
fopen('name_file','rt+') Открывается существующий текстовый файл, который может использоваться как для чтения, так и для записи (новый файл при этом не создается)
fopen('name_file','w') Открывается существующий или создается новый бинарный файл для записи. Предыдущее содержимое существующего файла пропадает
fopen('name_file','wt') Открывается существующий или создается новый текстовый файл для записи. Предыдущее содержимое существующего файла пропадает
fopen('name_file','w+') Если существующий бинарный файл был ранее открыт, то его содержимое от текущей позиции указателя и до конца усекается. Если файл с таким именем не Существовал, то создается новый Файл. Открытый файл можно Использовать для записи и чления.
fopen('name_file','wt+') Если существующий текстовый файл был ранее открыт, то его содержимое от текущей позиции указателя и до конца усекается. Если файл с таким именем не Существовал, то создается новый Файл. Открытый файл можно Использовать для записи и чления.
fopen('name_file','a') Открывается существующий бинарный файл для дозаписи или создается новый файл.
fopen('name_file','at') Открывается существующий текстовый файл для дозаписи или создается новый файл.
fopen('name_file','a+') Открывается существующий бинарный файл для чтения и дозаписи. Если файла с указанным именем нет, то его создают.
fopen('name_file','at+') Открывается существующий текстовый файл для чтения и дозаписи. Если файла с указанным именем нет, то его создают.

Отметим, что иногда при открытии бинарных файлов по аналогии с языком программирования C++ к символам режима добавляют буку b (от английского слова binary – бинарный или двоичный): 'rb', 'wb' и т.д.

Операции обмена как с текстовыми, так и с бинарными файлами используют указатель на начало текущей позиции данных. Если файл открывают для чтения или записи этот указатель ориентирован на первую строку или первый байт в соответствующем наборе данных. Если файл открывают для дозаписи, то указатель перемещается в конец данных, что позволяет присоединить новые данные в дополнение к существующей информации.

Заметим, что функция fopen допускает еще один вариант вызова:

v=fopen('all');

В этом случае она возвращает вектор с номерами всех файлов, открытых к рассматриваемому моменту времени (файлы с номерами 0, 1 и 2, закрепленными за системными файлами (это соответственно файл стандартного ввода (stdin), файл стандартного вывода (stdout) и файл, предназначенный для вывода сообщений об ошибках (stderr)), в этот список не влючаются.