Arduino IDE中如何实现类似ftell()的文件长度获取功能?
问题:Arduino中如何实现类似C语言
ftell()的功能? 我在C语言中用以下代码计算文件中值的数量:
fseek(file, 0, SEEK_END); size_t inSize = ftell(file); size_t no_ofelem = inSize/2;
改成Arduino IDE代码后:
file.seek(file.size()); inSize = file.position(); no_ofelem = inSize/2;
两者结果不一致——C语言中no_ofelem为2502,Arduino中为10。请问如何在Arduino IDE中实现类似ftell(file)的功能?
解决方案
你不需要通过seek()加position()的方式获取文件大小,Arduino的File对象直接提供了size()方法,它的作用就等同于C语言中fseek(file, 0, SEEK_END)后调用ftell(file)的效果,直接返回文件的总字节数。
正确的代码应该是:
size_t inSize = file.size(); size_t no_ofelem = inSize / 2;
为什么原来的代码出错?
file.seek(file.size())会将文件指针移动到末尾,但部分存储介质(比如SD卡)的File对象实现中,position()返回的指针位置可能存在同步问题,导致得到错误的数值。而size()方法是直接从文件系统中读取文件的实际大小,结果更可靠,完全匹配你在C语言中想要的ftell()效果。
内容的提问来源于stack exchange,提问作者stella
相关产品推荐
相关产品推荐

