FatFs 0.09b 常用函数(二)

f_read,f_write,f_lseek,f_truncate


(1) f_read  从一个文件读取数据

FRESULT f_read ( 
    FIL* FileObject,
    void* Buffer,
    UINT ByteToRead,
    UINT* ByteRead
);

参数:

    FileObject  指向将被读取的已打开的文件对象结构的指针。 

    Buffer  指向存储读取数据的缓冲区的指针。 

    ByteToRead  要读取的字节数,UINT 范围内。 

    ByteRead  指向返回已读取字节数的 UINT 变量的指针。在调用该函数后,无论结果如何,数值都是有效的。

返回值:

    FR_OK (0)  函数成功。 

    FR_DENIED  由于文件是以非读模式打开的,而导致该函数被拒绝。 

    FR_DISK_ERR  由于底层磁盘 I/O函数中的错误,而导致该函数失败。 

    FR_INT_ERR  由于一个错误的 FAT 结构或一个内部错误,而导致该函数失败。 

    FR_NOT_READY  由于驱动器中没有存储介质或任何其他原因,而导致磁盘驱动器无法工作。 

    FR_INVALID_OBJECT  文件对象无效。

举例:

res=f_open(&fl,"0:temp.txt", FA_READ);
if(!res) 
{ 
    while(1)
    {       
        res=f_read(&fl,buffer,64,&br);   
        if(res || br<64)
        {
            break;//br小于64说明此次已经读到文件尾了,所以退出
        }
    } 
} 
f_close(&fl);

 

(2) f_write  写数据到一个文件

FRESULT f_write ( 
    FIL* FileObject,
    const void* Buffer,
    UINT ByteToWrite,
    UINT* ByteWritten
);

参数:

    FileObject  指向将被写入的已打开的文件对象结构的指针。 

    Buffer  指向存储写入数据的缓冲区的指针。 

    ByteToWrite  要写入的字节数,UINT 范围内。 

    ByteWritten  指向返回已写入字节数的 UINT 变量的指针(记录已写入的字节数)。

返回值:

    FR_OK (0)  函数成功。 

    FR_DENIED  由于文件是以非写模式打开的,而导致该函数被拒绝。 

    FR_DISK_ERR  由于底层磁盘 I/O函数中的错误,而导致该函数失败。 

    FR_INT_ERR  由于一个错误的 FAT 结构或一个内部错误,而导致该函数失败。 

    FR_NOT_READY  由于驱动器中没有存储介质或任何其他原因,而导致磁盘驱动器无法工作。 

    FR_INVALID_OBJECT  文件对象无效。

举例:

res=f_open(&fl,"0:temp.txt",FA_WRITE|FA_OPEN_ALWAYS);
if(res==FR_OK) 
{ 
    while(1) 
    { 
        res=f_write(&fl,buffer,64,&bw); 
        if(res || bw>=64)
        {
            break;//bw>=64说明此次已经写够了64个字节,所以退出。
        } 
    }  
} 
f_close(&fl);

 

(3) f_lseek  移动一个打开的文件对象的文件读/写指针

FRESULT f_lseek ( 
    FIL* FileObject,
    DWORD Offset
);

参数:

    FileObject  打开的文件对象的指针 

    Offset  相对于文件起始处的字节数,当在写模式下指定了一个超过文件大小的 offset 时,文件的大小将被扩展,并且该扩展的区域中的数据是未定义的。这适用于为快速写操作迅速地创建一个大的文件。

返回值:

    FR_OK (0)  函数成功。 

    FR_DISK_ERR  由于底层磁盘 I/O函数中的错误,而导致该函数失败。 

    FR_INT_ERR  由于一个错误的 FAT 结构或一个内部错误,而导致该函数失败。 

    FR_NOT_READY  由于驱动器中没有存储介质或任何其他原因,而导致磁盘驱动器无法工作。 

    FR_INVALID_OBJECT  文件对象无效。

举例:

res = f_open (&fl ,"news/news.txt", FA_WRITE); 
  
res = f_lseek (&fl , 500); //指针指向第500个字节  
res = f_lseek (&fl , fl.fptr + 100); //指针向前移动 100 个字节  
res = f_lseek (&fl , fl.fptr - 200); //指针向后移动 200 个字节  
res = f_lseek (&fl , fl.fsize); //指针指向文件末尾 
  
res = f_close (&fsrc);

 

(4) f_truncate  截断文件

FRESULT f_truncate( 
    FIL* FileObject
);

参数:

    FileObject  打开的文件对象的指针,截断文件到当前的文件读/写指针。当文件读/写指针已经指向文件结束时,该函数不起作

用。

返回值:

    FR_OK (0)  函数成功。 

    FR_DENIED  由于文件是以非写模式打开的,而导致该函数被拒绝。 

    FR_DISK_ERR  由于底层磁盘 I/O函数中的错误,而导致该函数失败。 

    FR_INT_ERR  由于一个错误的 FAT 结构或一个内部错误,而导致该函数失败。 

    FR_NOT_READY  由于驱动器中没有存储介质或任何其他原因,而导致磁盘驱动器无法工作。 

    FR_INVALID_OBJECT  文件对象无效。

举例:

res = f_open (&fl ,"news/news.txt", FA_WRITE); 
res = f_lseek (&fl , 500); //指针指向第500个字节  
res = f_truncate (&fl);  //将文件在此截断 
res = f_close (&fl);
标签:C/MCUFatFs

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://evelee.net/blog/?id=43