# mopen

открывает файл в Scilab'е

## Последовательность вызова

    [fd, err] = mopen(file [, mode, swap ])

## Аргументы

file

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

mode

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

swap

  скаляр. Если есть `swap` и `swap = 0`, тогда автоматическая перестановка байтов отключается.

  Значение по умолчанию равно 1.

err

  скаляр. Индикатор ошибки.

  значение ошибки: | сообщение об ошибке:
  0 | нет ошибки
  -1 | больше нет логических модулей
  -2 | не могу открыть файл
  -3 | больше нет памяти
  -4 | некорректное имя
  -5 | некорректный статус

fd

  скаляр: дескриптор файла (это положительное целое число).

## Описание

Функция `mopen` может использоваться для того, чтобы открыть файл `file` способом, совместимым с C-процедурой `fopen`. Без аргумента `swap` файл `file` предполагается закодированным в формате IEEE "с прямым порядком байтов" и байты данных автоматически переставляются, если необходимо соответствовать формату IEEE процессора.

Параметр `mode` управляет типом доступа к потоку. Этот параметр может иметь одно из следующих значений:

r

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

w

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

a

  открывает файл для добавления записи. Создаёт файл если он не существует.

r+

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

w+

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

a+

  открывает файл как на чтение, так и на добавление записи. Создаёт файл если он не существует.

Кроме того могут быть использованы следующие символы для определения типа файла:

t

  текстовый файл.

b

  двоичный файл (по умолчанию).

По умолчанию режим доступа `'rb'` (чтение двоичного файла).

Заметьте: в Windows, в режиме текстового файла комбинации CR (возврат каретки) - LF (конец строки) преобразуются в LF при чтении, а LF преобразуются в комбинации CR-LF при записи.

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

Когда вы открываете файл для добавления записи (то есть, когда параметр `mode` равен `a` или `a+`), то невозможно перезаписать информацию, которая уже есть в файле. Вы можете использовать функцию `mseek` для смены положения указателя позиции в файле в любое место файла, но, когда вывод записан в файл, текущий указатель позиции в файле игнорируется. Весь вывод записывается в конец файла и указатель позиции в файле перемещается в конец вывода.

Чтобы открыть файлы способом, совместимым с Fortran-функциями используйте функцию `file`.

## Примеры

    // открываем SCI+'/ACKNOWLEDGEMENTS' как текст только для чтения
    fd_r = mopen(SCI+'/ACKNOWLEDGEMENTS', 'rt')

    // читаем пять строк в fd_r
    mgetl(fd_r, 5)

    // другой способ чтения файла
    // здесь читаются пять слов
    mfscanf(5, fd_r, '%s')

    // закрываем дескриптор файл, связанный с SCI+'/ACKNOWLEDGEMENTS'
    mclose(fd_r);

    // открываем файл как текст с возможностью записи
    fd_w = mopen(TMPDIR+'/write.txt', 'wt');

    // записываем строчку в fd_w
    mputl('This is a line of text', fd_w);
    mclose(fd_w);

    // читаем текст
    fd_r2 = mopen(TMPDIR+'/write.txt', 'rt');
    mgetl(fd_r2)
    mclose(fd_r2);

    // читаем/записываем файл как двоичный

    // сперва мы запишем файл
    fd_wb = mopen(TMPDIR+'/writeread.bin', 'wb')

    // положим значения в двоичном виде
    mput(2003, 'l', fd_wb);
    mput(2008, 'i', fd_wb);
    mput(2012, 's', fd_wb);
    mput(98, 'c', fd_wb);

    // закроем дескриптор файла, связанный с TMPDIR+'/writeread.bin'
    mclose(fd_wb);

    // прочитаем файл
    fd_rb = mopen(TMPDIR+'/writeread.bin', 'rb')

    mget(fd_rb, 'l')
    mget(fd_rb, 'i')
    mget(fd_rb, 's')
    mget(fd_rb, 'c')

    mclose(fd_rb)

## Смотрите также

- file
- mclose
- merror
- meof
- mfprintf
- fprintfMat
- mfscanf
- fscanfMat
- mget
- mgetl
- mgetstr
- mprintf
- mput
- mputl
- mputstr
- mseek
- mtell
- mdelete