无法使用 fstream 和 ifstream 读取 NDK C++中的文件
Failed to read files in NDK C++ using fstream and ifstream
我正在尝试使用 ifstream 在 NDK 中加载文件,但它无法读取它。我已经仔细检查了文件的路径,它没有错。同样的程序在普通C++下工作(当然没有JNI的东西(。
#include <jni.h>
#include <string>
#include <iostream>
#include <istream>
#include <sstream>
#include <fstream>
using namespace std;
extern "C"
{
JNIEXPORT jstring JNICALL Java_com_example_aaaaatrytest_MainActivity_stringFromJNI(JNIEnv *env, jobject /* this */) {
string file_path = "/home/moe/Desktop/blah.txt";
std::ifstream fim(file_path);
if(fim.is_open())
{
string pass = "File Loaded";
return env->NewStringUTF(pass.c_str());
}
else{
std::string fail = "Failed to load file";
return env->NewStringUTF(fail.c_str());
}
}
}
删除 if-else 和调试后,调试器将显示以下内容:
SIGTRAP (signal SIGTRAP)
env = {JNIEnv * | 0x55bc7ccc00} 0x00000055bc7ccc00
{jobject | 0x7fcefb1af4} 0x0000007fcefb1af4
我尝试使用 fstream 而不是 ifstream,但同样的错误。我还在清单中提供了外部存储写入和读取权限.xml但没有帮助。这个问题与格式无关,因为我试图在路径中放置不同的文件。为什么无法读取文件?
我已经将文件复制到我的设备并提供了Android路径,但它仍然无法读取。我的安卓文件路径看起来像这样"/storage/emulated/0/abc/abc.txt"。
你的应用需要READ_EXTERNAL_STORAGE权限。
下面是一个小片段,有助于在运行时请求此权限:请参阅READ_EXTERNAL_STORAGE权限在清单中,但仍然不起作用。
相关文章:
- 如何使用ndk-build.cmd构建Android.so文件
- Android NDK传感器向事件队列报告奇怪的间隔
- Android NDK 编译 LAME HAVE_MPGLIB > 'interface.h' 文件未找到
- NDK:如何通过ndkr15c包含"RefBase.h"?
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- 为什么使用 NDK 不能存在不同的 stl 实现?
- 在 constexpr 构造函数 (c++17) 中赋值到 const char * 在使用 Android NDK 时
- 如何在 android ndk 上链接 C 和 C++ 代码,以及 C 和 C++ 运行时库(包括 STL)?
- Android NDK 未定义对ASensorEventQueue_registerSensor的引用
- 如何将 libjpeg-turbo Android NDK 添加为静态库
- 在 Flutter 应用程序中使用 Android NDK 中的 AssetManager 类
- Android NDK - 无法在 Visual Studio 2017 中调试
- 对于哪些 ABI,我可以使用 NDK v10e 构建 apk?
- -fno-unwind-tables 和 -fno-async-unwind-tables 不起作用 NDK clang
- 不再支持Android NDK APP_STL gnustl_shared
- 我在 ndk 中构建文件时遇到错误 android.mk
- Android NDK:用于第三方Java库的静态或共享C++运行时
- 为 Android NDK 编译库
- 将预编译的 C 共享库与 JNI/NDK 结合使用
- 如何使用 ndk 加载 Android 版 AAudio API