最新版 FatFS f_lseek详解

作者:fly 发布于:2014-3-21 16:29 分类:嵌入式

f_lseek

移动一个打开的文件对象的文件读/写指针。也可以被用来扩展文件大小(簇预分配)。

FRESULT f_lseek (

 FIL* FileObject,         /* 文件对象结构指针 */

 DWORD Offset             /* 文件字节偏移 */

);

参数

FileObject


打开的文件对象的指针

Offset


相对于文件起始处的字节数

返回值

FR_OK (0)


函数成功。

FR_DISK_ERR


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

FR_INT_ERR


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

FR_NOT_READY


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

FR_INVALID_OBJECT 文件对象无效。


描述

f_lseek函数当FS_MINIMIZE <= 2时可用。

offset只能被指定为相对于文件起始处的字节数。当在写模式下指定了一个超过文件大小的offset时,文件的大小将被扩展,并且该扩展的区域中的数据是未定义的。这适用于为快速写操作迅速地创建一个大的文件。f_lseek函数成功后,为了确保读/写指针已被正确地移动,必须检查文件对象中的成员fptr。如果fptr不是所期望的值,则发生了下列情况之一。


文件结束。指定的offset被钳在文件大小,因为文件已被以只读模式打开。

磁盘满。卷上没有足够的空闲空间去扩展文件大小。

例子

   /* 移动文件读/写指针到相对于文件起始处偏移为5000字节处 */

   res = f_lseek(file, 5000);


   /* 移动文件读/写指针到文件结束处,以便添加数据 */

   res = f_lseek(file, file->fsize);


   /* 向前3000字节 */

   res = f_lseek(file, file->fptr + 3000);


   /* 向后(倒带)2000字节(注意溢出) */

   res = f_lseek(file, file->fptr - 2000);


   /* 簇预分配(为了防止在流写时缓冲区上溢 */


   res = f_open(file, recfile, FA_CREATE_NEW | FA_WRITE); /* 创建一个文件 */


   res = f_lseek(file, PRE_SIZE);         /* 预分配簇 */

   if (res || file->fptr != PRE_SIZE) ... /* 检查文件大小是否已被正确扩展 */


   res = f_lseek(file, DATA_START);       /* 没有簇分配延迟地记录数据流 */

   ...


   res = f_truncate(file);                /* 截断未使用的区域 */

   res = f_lseek(file, 0);                /* 移动到文件起始处 */

   ...


   res = f_close(file);

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 文件对象无效。


描述

f_truncate函数当_FS_READONLY == 0 并且 _FS_MINIMIZE == 0时可用。

f_truncate函数截断文件到当前的文件读/写指针。当文件读/写指针已经指向文件结束时,该函数不起作用。

发表评论:

 
Powered by emlog sitemap