Android P90上ftell无法获取文件大小
背景描述:
在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无法获取文件大小相关推荐
- android java file 清理垃圾获取文件大小 删除文件等操作
这么久没有写博客了,今天给大家分享一些多file文件的操作.一般可以用到清理垃圾获取文件大小 删除文件等操作,可以直接用于工具类里面,直接做操作便可以 public final class FileU ...
- android 获取文件夹的字节数,android java file 清理垃圾获取文件大小 删除文件等操作...
这么久没有写博客了,今天给大家分享一些多file文件的操作.一般可以用到清理垃圾获取文件大小 删除文件等操作,可以直接用于工具类里面,直接做操作便可以 public final class FileU ...
- 在Android界面上显示和获取Logcat日志输出
一.首先我们要获取Logcat中的日志 如何获取呢? 首先我们要先定义一个String[]数组,里面的代码是 //第一个是Logcat ,也就是我们想要获取的log日志 //第二个是 -s 也就是表示 ...
- android 获取文件大小
今天,简单讲讲android在读取文件时,如何获取文件大小. 目前有两种实现方法,一种是使用File的length()方法:另外一种是使用FileInputStream的available()方法,当 ...
- fseek ftell rewind stat 等函数,实现获取文件大小
fseek ftell rewind stat 等函数,实现获取文件大小 fseek()函数:int fseek(FILE *stream, long int offset, int whence) ...
- Windows上获取文件大小的几种方法及获取文件夹大小方法
文章来自:https://blog.csdn.net/mfcing/article/details/53184921 获取文件大小 Windows提供了好几个API函数来获取文件大小,还可以使用标准C ...
- 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 获取 Activity 中的所有方法 | 获取方法上的注解 | 获取注解上的注解 | 通过注解属性获取事件信息 )
文章目录 前言 一.获取 Activity 中的所有方法 二.获取方法上的注解 三.获取注解上的注解 四.通过注解属性获取相关事件信息 前言 Android 依赖注入的核心就是通过反射获取 类 / 方 ...
- C语言如何获取文件大小?fseek() + ftell()
创建一个文件file.txt,然后往里面写内容,然后关闭文件,再打开文件获取文件大小 #pragma warning(disable : 4996) #include <stdio.h>i ...
- android 摄像头参数,获取Android设备上的详细的摄像头信息
原标题:获取Android设备上的详细的摄像头信息 如何获取Android设备上的详细的摄像头信息呢? 目前Samsung的Galaxy Tab和Nexus S均有前置摄像头,获取Android摄像头 ...
最新文章
- 第18章:MYSQL分区
- 没毛病!00后和90后成为暑期出游两大主力群体
- 二叉树的创建及其相关操作
- Android Jetpack 系列篇(一) Data Binding
- 学习C语言 - 推荐书籍
- android弹球动画,FlingAnimation/SpringAnimation实现弹球动画
- python-QQ群扫码登录(QQ群验证)
- SylixOS的来龙去脉
- 线性代数《Linear Algebra and Its Application》学习总结
- ImageView设置rounded corner
- 设某种二叉树有如下特点:每个结点要么是叶子结点,要么有2棵子树。假如一棵这样的二叉树中有m(m0)个叶子结点,那么该二叉树上的结点总数为( )。
- ACT技能编辑器的制作经验
- git 查看远程分支、本地分支、创建分支、把分支推到远程repository、删除本地分支
- 乾颐堂python完整版百度云_第一卦 乾 乾为天 乾上乾下
- wx网罗系列之翔实:使用C++开发wxWidgets程序
- java获取时间的各种风格_Java8新特性之新日期API
- [Java]源码角度深入理解哈希表,手撕常见面试题
- 提问的艺术 for ChatGPT
- 计算机如何高效识别图像?
- 如何获得新版的CCNP认证