使用NDK,std :: fstream open()失败,而fopen()正常工作,为什么?

kuj*_*iti 2 c++ android fstream android-ndk

当我运行以下代码时:

char const * path = "/path/to/file";
std::fstream fs;
fs.open(path, fstream::in | fstream::out | fstream::binary);
if (!fsWave) {
    LOGE("open, Error opening file %s", path);
}
Run Code Online (Sandbox Code Playgroud)

它打印错误日志 open, Error opening file /path/to/file

但是,以下工作顺利进行:

FILE * pf = NULL;
if(NULL == (pf = fopen(path, "w+b"))) {
    LOGE("open, Error opening file %s", path);
}
Run Code Online (Sandbox Code Playgroud)

通过顺利,我的意思是,它不打印错误日志和没有创建在指定位置的文件.

建立

  • Android Studio 2.2.1
  • NDK 12.1.2977051
  • 清单中包含的权限android.permission.WRITE_EXTERNAL_STORAGE,android.permission.READ_EXTERNAL_STORAGE
  • 测试设备 - 三星S6

可能是什么原因,fstream::open()失败了?

Ker*_* SB 5

C文件API模式"w+"对应于iostream 打开模式 in | out | trunc,而不是in | out.前者创建一个新文件,如果它不存在,后者会导致错误.