FatFs文件系统:f_open

网站作者5个月前FatFs38414

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

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_mkdir

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

FatFs文件系统:f_printf

f_printf 函数向文件中写入一个格式化字符串。int f_printf (        FIL* FileObject, /* 文件对象指针 */        const char* F...

FatFs文件系统:get_fattime

获取当前时间。DWORD get_fattime (void);参数:void返回值:返回的当前时间被打包进一个 DWORD 数值。各位域定义如下: bit31:25 年,从 1980 年开始算起(0...

FatFs文件系统:f_read

从一个文件读取数据。FRESULT f_read (      FIL* FileObject, /* 文件对象结构的指针 */      void* Buffer, /* 存储读取数据的缓冲区的...

FatFs文件系统:disk_write

向磁盘驱动器中写入扇区。DRESULT disk_write (        BYTE Drive, /* 物理驱动器号 */        const BYTE* Buffer, /* 写入数...

FatFs文件系统:f_readdir

读取目录项。FRESULT f_readdir (      DIR* DirObject, /* 指向打开的目录对象结构的指针 */      FILINFO* FileInfo /* 指向文件...

发表评论    

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