Библиотека FatFS: f_open Печать
Добавил(а) microsin   

f_open

Функция f_open создает файловый объект (file object), который используется для доступа к файлу.
FRESULT f_open (
  FIL* FileObject,       /* Указатель на чистую структуру файлового объекта */
  const TCHAR* FileName, /* Указатель на имя файла */
  BYTE ModeFlags         /* Флаги режима работы с файлом */
);

Параметры

FileObject
Указатель на пока незаполненную структуру данных объекта файла.
FileName
Указатель на строку, завершенную нулем (null-terminated, ASCIIZ), в которой находится имя файла для создания или открытия.
ModeFlags
Указывает тип доступа и метод открытия для файла. Указывается комбинацией по ИЛИ следующих флагов:
ЗначениеОписание
FA_READ Указывает доступ на чтение к объекту. В этом случае данные могут быть прочитаны из файла.
Примените этот флаг в комбинации с флагом FA_WRITE, чтобы получить доступ и на чтение, и на запись.
FA_WRITE Указывает доступ на запись к объекту. В этом случае данные могут быть записаны в файл.
Примените этот флаг в комбинации с флагом FA_READ, чтобы получить доступ и на чтение, и на запись.
FA_OPEN_EXISTING Открытие уже имеющегося на диске файла. Функция завершится с ошибкой, если файл не существует (поведение по умолчанию).
FA_OPEN_ALWAYS Если файл существует, то он будет открыт, если же нет, то будет создан новый файл.
Для добавления данных в файл используйте функцию f_lseek, если файл будет открыт этим методом.
FA_CREATE_NEW Создает новый файл. Функция завершится с ошибкой FR_EXIST, если файл уже существует.
FA_CREATE_ALWAYS Создает новый файл. Если файл уже существует, то он будет обрезан и перезаписан.

Описание

После того, как функция f_open завершилась успешно, файловый объект считается действительным. Файловый объект используется для последующих вызовов функций чтения/записи, чтобы идентифицировать конкретный файл. Когда работа с файловым объектом завершается, используйте фунцию f_close для закрытия файла. Если измененный файл не закрыт, данные файла могут быть потеряны.

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

Перед использованием любой файловой функции должна быть зарегистрирована рабочая область (file system object) на логическом диске вызовом функции f_mount. Все API-функции, за исключением f_fdisk, могут работать только после этой процедуры монтирования.

Краткая информация (QuickInfo)

Сама функция доступна всегда, независимо от заданной конфигурации FatFS. Флаги режима FA_WRITE, FA_CREATE_ALWAYS, FA_CREATE_NEW и FA_OPEN_ALWAYS недоступны, когда _FS_READONLY == 1.

Код примера (копирование файла)

void main (void)
{
    FATFS fs[2];         /* Рабочая область (file system object) для логических дисков */
    FIL fsrc, fdst;      /* файловые объекты */
    BYTE buffer[4096];   /* буфер для копирования данных фала */
    FRESULT res;         /* общий код возврата функций FatFs */
    UINT br, bw;         /* счетчик чтения/записи файла */
    /* Регистрирование рабочей области для каждого тома (всегда закончится успешно,
независимо от состояния диска) */
f_mount(0, &fs[0]); f_mount(1, &fs[1]); /* Открыть файл источника на диске 1 */ res = f_open(&fsrc, "1:srcfile.dat", FA_OPEN_EXISTING | FA_READ); if (res) die(res); /* Открыть файл-копию на диске 0 */ res = f_open(&fdst, "0:dstfile.dat", FA_CREATE_ALWAYS | FA_WRITE); if (res) die(res); /* Копирование данных из файла-источника в файл-копию */ for (;;) { res = f_read(&fsrc, buffer, sizeof(buffer), &br); /* Чтение куска из файла src */ if (res || br == 0) break; /* ошибка или eof (конец данных файла) */ res = f_write(&fdst, buffer, br, &bw); /* Запись куска в файл dst */ if (res || bw < br) break; /* ошибка, если диск переполнен */ } /* Закрытие открытых файлов */ f_close(&fsrc); f_close(&fdst); /* Дерегистрация и отмена рабочих областей */ f_mount(0, NULL); f_mount(1, NULL); }

См. также

f_read, f_write, f_close, FIL, FATFS

[Ссылки]

1. f_open - открытие/создание файла (оригинал статьи на английском языке).