FatFs文件系统:f_open

网站作者1年前FatFs39072

创建/打开一个用于访问文件的文件对象。

FRESULT f_open ( 
    FIL* FileObject, /* 空白文件对象结构指针 */ 
    const XCHAR* FileName, /* 文件名指针 */ 
    BYTE ModeFlags /* 模式标志 */
);


参数:

FileObject 将被创建的文件对象结构的指针。

FileNameNULL 结尾的字符串指针,该字符串指定了将被创建或打开的文件名。

ModeFlags 指定文件的访问类型和打开方法。它是由下列标志的一个组合指定的。

模式描述
FA_READ指定读访问对象。可以从文件中读取数据。与 FA_WRITE 结合可以进行读写访问。
FA_WRITE指定写访问对象。可以向文件中写入数据。与 FA_READ 结合可以进行读写访问。
FA_OPEN_EXISTING打开文件。如果文件不存在,则打开失败。(默认) 
FA_OPEN_ALWAYS如果文件存在,则打开;否则,创建一个新文件。
FA_CREATE_NEW创建一个新文件。如果文件已存在,则创建失败。
FA_CREATE_ALWAYS创建一个新文件。如果文件已存在,则它将被截断并覆盖。

注意:当 _FS_READONLY == 1 时,模式标志 FA_WRITE, FA_CREATE_ALWAYS, FA_CREATE_NEW,FA_OPEN_ALWAYS 是无效的。


返回值:

    FR_OK (0)函数成功,该文件对象有效。
    FR_NO_FILE 找不到该文件。
    FR_NO_PATH 找不到该路径。
    FR_INVALID_NAME 文件名无效。
    FR_INVALID_DRIVE 驱动器号无效。
    FR_EXIST 该文件已存在。
    FR_DENIED 由于下列原因,所需的访问被拒绝:
        • 以写模式打开一个只读文件。
        • 由于存在一个同名的只读文件或目录,而导致文件无法被创建。
        • 由于目录表或磁盘已满,而导致文件无法被创建。
    FR_NOT_READY 由于驱动器中没有存储介质或任何其他原因,而导致磁盘驱动器无法工作。
    FR_WRITE_PROTECTED 在存储介质被写保护的情况下,以写模式打开或创建文件对象。
    FR_DISK_ERR 由于底层磁盘 I/O 接口函数中的一个错误,而导致该函数失败。
    FR_INT_ERR 由于一个错误的 FAT 结构或一个内部错误,而导致该函数失败。
    FR_NOT_ENABLED 逻辑驱动器没有工作区。
    FR_NO_FILESYSTEM 磁盘上没有有效地 FAT 卷。


描述:

如果函数成功,则创建一个文件对象。该文件对象被后续的读/写函数用来访问文件。如果想要关闭一个打开的文件对象,则使用 f_close 函数。如果不关闭修改后的文件,那么文件可能会崩溃。在使用任何文件函数之前,必须使用 f_mount 函数为驱动器注册一个工作区。只有这样,其他文件函数才能正常工作。


示例(文件拷贝)

void main (void)
{ 
    FATFS fs[2]; /* 逻辑驱动器的工作区(文件系统对象) */ 
    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); 
        if (res || br == 0) break; /* 文件结束错误 */
        res = f_write(&fdst, buffer, br, &bw); 
        if (res || bw < br) break; /* 磁盘满错误 */ 
    } /* 关闭打开的文件 */ 
    
    f_close(&fsrc); f_close(&fdst); /* 注销工作区(在废弃前) */ 
    f_mount(0, NULL); 
    f_mount(1, NULL);
}


相关文章

FatFs文件系统:f_fdisk

划分一个物理驱动器。FRESULT f_fdisk (        BYTE Drive, /* Physical drive number */        const DWORD Part...

FatFs文件系统:f_lseek

移动一个打开的文件对象的文件读/写指针。也可以被用来扩展文件大小(簇预分配)。FRESULT f_lseek (      FIL* FileObject, /* 文件对象结构指针 */     ...

FatFs文件系统:f_gets

f_gets 从文件中读取一个字符串。char* f_gets (        char* Str, /* 读缓冲区 */        int Size, /* 读缓冲区大小 */     ...

FatFs文件系统:f_mkdir

创建一个目录。FRESULT f_mkdir (        const XCHAR* DirName /* 目录名的指针 */   );参数:DirName'\0'结尾的字符串指针,该字符串指...

FatFs文件系统:f_putc

f_putc 函数向文件中写入一个字符。int f_putc (        int Chr, /* 字符 */        FIL* FileObject /* 文件对象 */   );参...

FatFs文件系统:f_mount

在 FatFs 模块上注册/注销一个工作区(文件系统对象)FRESULT f_mount (  BYTE Drive, /* 逻辑驱动器号 */  FATFS* FileSystemObject ...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。