Нашли опечатку?
Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.
|
Библиотека 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 |
Создает новый файл. Если файл уже существует, то он будет обрезан и перезаписан. |
Возвращаемые значения
FR_OK, FR_DISK_ERR, FR_INT_ERR, FR_NOT_READY, FR_NO_FILE, FR_NO_PATH, FR_INVALID_NAME, FR_DENIED, FR_EXIST, FR_WRITE_PROTECTED, FR_INVALID_DRIVE, FR_NOT_ENABLED, FR_NO_FILESYSTEM, FR_TIMEOUT, FR_LOCKED, FR_NOT_ENOUGH_CORE, FR_TOO_MANY_OPEN_FILES
Описание
После того, как функция 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);
}
[Ссылки]
1. f_open - открытие/создание файла (оригинал статьи на английском языке). |
Добавить комментарий
|