FatFs文件系统:f_lseek

网站作者2年前FatFs13599

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

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 被钳在文件大小,因为文件已被以只读模式打开。

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


示例:

res = f_lseek(file, 5000); /* 移动文件读/写指针到相对于文件起始处偏移为 5000 字节处 */
res = f_lseek(file, file->fsize); /* 移动文件读/写指针到文件结束处,以便添加数据 */
res = f_lseek(file, file->fptr + 3000);  /* 向前 3000 字节 */
res = f_lseek(file, file->fptr - 2000); /* 向后(倒带)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);


相关文章

FatFs文件系统:f_readdir

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

FatFs文件系统:f_read

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

FatFs文件系统:f_close

关闭一个打开的文件。FRESULT f_close (      FIL* FileObject /* 文件对象结构的指针 */ );参数:FileObject 指向将被关闭的已打开的文件对象结构...

FatFs文件系统:f_open

创建/打开一个用于访问文件的文件对象。FRESULT f_open (      FIL* FileObject, /* 空白文件对象结构指针 */      const XCHAR* FileN...

FatFs文件系统:f_puts

f_puts 函数向文件中写入一个字符串。int f_puts (        const char* Str, /* 字符串指针 */        FIL* FileObject /* 文件...

FatFs文件系统:get_fattime

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

发表评论    

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