背景描述:

在P90上,File.createNewFile、File.rename、File.delete等文件目录操作无法操作SDCard文件

也不会报错,只会return false;表示执行结果失败

google 推出新的api来管理SDCard卡文件操作DocumentFile

具体操作细节如之前文章   Android 9.0 sdCard文件读写

问题:

通过DocumentFile确实可以解决文件读写问题,但是遇到另一个问题

无法通过ftell获取文件大小。

解决方案:

通过stat获取文件信息中的文件大小

代码如下:

JNIEXPORT jlong Java_demo_second_com_ndkdemo2_NdkHelp_loadFromFilePathIteration(JNIEnv *env, jobject obj, jint handle, jstring filePath, jboolean isIteration)
{FILE* pfileHandle;#ifdef ITER_DEBUGLOGD(" alloc string begin");#endifconst char* pszPath = env->GetStringUTFChars(filePath, 0);if (pszPath == 0) {env->ReleaseStringUTFChars(filePath, pszPath);return 0;}int iPath = strlen(pszPath);char* pszOut = new char[iPath + 1];if (pszOut == 0) {env->ReleaseStringUTFChars(filePath, pszPath);return 0;}strcpy(pszOut, pszPath);env->ReleaseStringUTFChars(filePath, pszPath);#ifdef ITER_DEBUGLOGD(" alloc string end");#endifpfileHandle = fopen(pszOut, "r");//fopen打开文件LOGD("[loadFromFilePathIteration] pfileHandle:%d",pfileHandle);if (pfileHandle == 0) return -4;int fseeksize= fseek(pfileHandle, 0, SEEK_END);//fseek把文件指针跳到文件末尾LOGD("[loadFromFilePathIteration] fseeksize:%d",fseeksize);long bufLen = ftell(pfileHandle);//ftell拿到文件指针的位置,也就是文件大小LOGD("[loadFromFilePathIteration] bufLen:%ld",bufLen);//无法拿到文件大小时,使用stat获取文件信息拿到文件大小if(bufLen<=0){struct stat statbuf;stat(pszPath,&statbuf);bufLen=statbuf.st_size;}LOGD("[loadFromFilePathIteration] bufLen:%ld",bufLen);jlong ret=0;if(bufLen<=0){ret=-1;}else{ret=bufLen;}return ret;
}

Android P90上ftell无法获取文件大小相关推荐

  1. android java file 清理垃圾获取文件大小 删除文件等操作

    这么久没有写博客了,今天给大家分享一些多file文件的操作.一般可以用到清理垃圾获取文件大小 删除文件等操作,可以直接用于工具类里面,直接做操作便可以 public final class FileU ...

  2. android 获取文件夹的字节数,android java file 清理垃圾获取文件大小 删除文件等操作...

    这么久没有写博客了,今天给大家分享一些多file文件的操作.一般可以用到清理垃圾获取文件大小 删除文件等操作,可以直接用于工具类里面,直接做操作便可以 public final class FileU ...

  3. 在Android界面上显示和获取Logcat日志输出

    一.首先我们要获取Logcat中的日志 如何获取呢? 首先我们要先定义一个String[]数组,里面的代码是 //第一个是Logcat ,也就是我们想要获取的log日志 //第二个是 -s 也就是表示 ...

  4. android 获取文件大小

    今天,简单讲讲android在读取文件时,如何获取文件大小. 目前有两种实现方法,一种是使用File的length()方法:另外一种是使用FileInputStream的available()方法,当 ...

  5. fseek ftell rewind stat 等函数,实现获取文件大小

    fseek ftell rewind stat 等函数,实现获取文件大小 fseek()函数:int fseek(FILE *stream, long int offset, int whence) ...

  6. Windows上获取文件大小的几种方法及获取文件夹大小方法

    文章来自:https://blog.csdn.net/mfcing/article/details/53184921 获取文件大小 Windows提供了好几个API函数来获取文件大小,还可以使用标准C ...

  7. 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 获取 Activity 中的所有方法 | 获取方法上的注解 | 获取注解上的注解 | 通过注解属性获取事件信息 )

    文章目录 前言 一.获取 Activity 中的所有方法 二.获取方法上的注解 三.获取注解上的注解 四.通过注解属性获取相关事件信息 前言 Android 依赖注入的核心就是通过反射获取 类 / 方 ...

  8. C语言如何获取文件大小?fseek() + ftell()

    创建一个文件file.txt,然后往里面写内容,然后关闭文件,再打开文件获取文件大小 #pragma warning(disable : 4996) #include <stdio.h>i ...

  9. android 摄像头参数,获取Android设备上的详细的摄像头信息

    原标题:获取Android设备上的详细的摄像头信息 如何获取Android设备上的详细的摄像头信息呢? 目前Samsung的Galaxy Tab和Nexus S均有前置摄像头,获取Android摄像头 ...

最新文章

  1. 第18章:MYSQL分区
  2. 没毛病!00后和90后成为暑期出游两大主力群体
  3. 二叉树的创建及其相关操作
  4. Android Jetpack 系列篇(一) Data Binding
  5. 学习C语言 - 推荐书籍
  6. android弹球动画,FlingAnimation/SpringAnimation实现弹球动画
  7. python-QQ群扫码登录(QQ群验证)
  8. SylixOS的来龙去脉
  9. 线性代数《Linear Algebra and Its Application》学习总结
  10. ImageView设置rounded corner
  11. 设某种二叉树有如下特点:每个结点要么是叶子结点,要么有2棵子树。假如一棵这样的二叉树中有m(m0)个叶子结点,那么该二叉树上的结点总数为( )。
  12. ACT技能编辑器的制作经验
  13. git 查看远程分支、本地分支、创建分支、把分支推到远程repository、删除本地分支
  14. 乾颐堂python完整版百度云_第一卦 乾 乾为天 乾上乾下
  15. wx网罗系列之翔实:使用C++开发wxWidgets程序
  16. java获取时间的各种风格_Java8新特性之新日期API
  17. [Java]源码角度深入理解哈希表,手撕常见面试题
  18. 提问的艺术 for ChatGPT
  19. 计算机如何高效识别图像?
  20. 如何获得新版的CCNP认证

热门文章

  1. java stringutils isnumeric_肯爹的 StringUtils.isNumeric(String str)
  2. mvc后台传到前台的值带html标签css(解决方法)
  3. 快运和快递有哪些区别
  4. insert操作获取自增主键的值
  5. Selinux是什么?
  6. IDEA Swagger 配置
  7. Qt项目如何插入库文件
  8. js-table2excel导出表格中图片不显示的解决方法
  9. 车牌识别系统完整商用级别设计流程
  10. 《Docker技术入门与实战》——3.6 存出和载入镜像