file управление файлами

## Синтаксис

                [unit, err] = file("open", file-name [,status] [,access [,recl]] [,format])
                file("close", unit)
                file("rewind", unit)
                file("backspace", unit)
                file("last", unit)
                [units, typ, nams, mod, swap] = file()
                [units, typ, nams, mod, swap] = file(unit)

## Аргументы

file-name

  строковое значение, имя файла, который нужно открыть

  Эта функция не может открывать файлы, чьи пути имеют не-ascii UTF-символы (диакритические знаки и т.д.). В этом случае следует использовать `mopen()`.
status

  строковое значение, статус файла, который следует открыть

  "new"

    файл не существует, новый файл (по умолчанию);

  "old"

    файл уже существует;

  "unknown"

    неизвестный статус;

  "scratch"

    файл должен будет удалён в конце сессии.

access

  строковое значение, тип доступа к файлу:

  "sequential"

    последовательный доступ (по умолчанию);

  "direct"

    прямой доступ. Тогда обязателен следующий аргумент `recl`.

format

  строковое значение, формат файла:

  "formatted"

    для форматированных файлов (по умолчанию);

  "unformatted"

    двоичная запись.

recl

  целочисленное значение, это размер записи в байтах, в случае `access="direct"`

unit

  целочисленное значение, указатель на логический модуль открытого файла

units

  вектор целочисленных значений, указатель на логический модуль открытого файла. Модули 5 и 6 (%io) зарезервированы системой для входных и выходных устройств.

typs

  Символьный вектор-строка, тип (C или Fortran) открытых файлов.

nams

  Символьный вектор-строка, имена путей открытых файлов.

mod

  режим открытия файла. Сформированный тремя элементами abc:

  >Файлы Fortran
  a | 0 стоит для форматированных, а 1 - для неформатированных (двоичных)
  b | 0 стоит для последовательного доступа, а 1 - для прямого доступа
  c | 0 стоит для "new", 1 - для "old", 2 - для "scratch" и 3 - для "unknown"
  C-файлы
  a | 1 стоит для "r" (чтение), 2 стоит для "w" (запись) и 3 - для "a" (дополнение)
  b | равен 1, если файл открыт в режиме "+" (обновление)
  c | равен 1, если файл открыт в режиме "b" (двоичный)

swap

  переключатель автоматического обмена. `swap=1`, если автоматический обмен включён. Для Fortran-файлов `swap` всегда 0.

err

  целочисленный код, возвращаемый, если открытие файла провалилось. Если `err` пропущен, то выдаётся сообщение об ошибке.

  65 | Файл уже используется
  66 | Открыто слишком много файлов!
  67 | Неизвестный формат файла
  240 | Файл уже существует или запрещена запись в директорию.
  241 | Файл не существует или чтение запрещено.

## Описание

`file(…)` выбирает логический модуль `unit` и управляет файлом `file-name`.

[unit [,err]]=file("open", file-name [,status] [,access [,recl]][,format])

  позволяет открыть файл с особыми параметрами и получить номер связанного модуля `unit`. Этот номер модуля можно использовать для дальнейших действий с этим файлом или в качестве дескриптора файла при вызове функций `read`, `write`, `save`, `load`.

file("close", unit)

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

file("rewind", unit)

  кладёт указатель в начало файла.

file("backspace", unit)

  кладёт указатель в начало последней записи.

file("last", unit)

  кладёт указатель после последней записи.

file()

  возвращает дескрипторы открытых файлов.

  Чтобы проверить, открыт ли файл, чей модуль равен `id`, можно использовать `file(id)~=[]`.

  Чтобы закрыть все открытые пользователем файлы (типа C или Fortran), можно использовать `file("close",file())`.

## Примеры

    u=file("open",TMPDIR+"/foo","unknown")
    for k=1:4
      a=rand(1,4)
      write(u,a)
    end
    file("rewind",u)
    x=read(u,2,4)
    file("close",u)
    //
    u1=file("open",TMPDIR+"/foo","unknown")
    u2=mopen(TMPDIR+"/foo1","wb")
    [units,typs,nams]=file()
    file("close",u1);
    mclose(u2);

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

- isfile
- read
- write
- mopen
- save
- load
- uigetfile

## История

6.0.0 Внесена stderr в выход file() в виде units(1)=0, typ(1)="STD" и nams(1)="stderr".