我有一个使用NDK的Android应用。我只是在C ++中使用fopen / etc存储/保存文件。我使用此Java函数获取存储位置位置,并将其传递给C ++:
private void SetFilePath()
{
//String storagePath=getFilesDir().getAbsolutePath();
String storagePath=null;
String cachePath=getCacheDir().getAbsolutePath();
// SDCARD
try
{
String storageState = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(storageState)) storagePath=getExternalFilesDir(null).getAbsolutePath();
}
catch (Exception e)
{
Log.v(IDS.LOG,"No permission to access external storage, missing android.permission.WRITE_EXTERNAL_STORAGE");
}
if (storagePath==null) storagePath=getFilesDir().getAbsolutePath();
SetFilePathNative(storagePath, cachePath);
mStorageDir = storagePath;
}
这是我在C ++中用于写入文件的功能:
bool WriteFile(char *theFilename, char *theDataPtr, int theLen)
{
FILE* aFile=fopen(theFilename,"w+");
if(!aFile) return false;
fclose(aFile);
aFile=fopen(theFilename,"w+b");
if(!aFile) return false;
if (aFile)
{
fwrite(theDataPtr, 1, theLen,aFile);
fclose(aFile);
return true;
}
return false;
}
我的一些用户正在发生什么事情(这是非常罕见的),他们将运行该应用程序,并且在数小时或数天或一段时间内一切正常。然后,突然之间,有一天他们将打开该应用程序,并且所有内容都将消失-一切将被完全擦除,并且上述函数检索到的存储路径将完全为空。
我不知道返回的路径是否正在更改,以便它指向一个新位置,或者数据实际上是否已被擦除,但是由于某种原因,它的作用就像用户完全卸载了该应用程序一样。
上面的代码有什么地方看起来不对吗?谁能暗示这可能发生的原因?