У меня есть приложение для Android, использующее NDK.Я храню / сохраняю файлы, просто используя fopen / etc в C ++.Я использую эту функцию 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;
}
Что происходитдля некоторых из моих пользователей (и это довольно редко), они будут запускать приложение, и все будет хорошо в течение нескольких часов или дней или некоторого периода времени.Затем, внезапно, однажды они откроют приложение, и все исчезнет - все будет полностью стерто, а путь к хранилищу, извлеченный вышеуказанной функцией, будет полностью пустым.
Я не знаю, возвращен липуть изменяется, поэтому он указывает на новое место, или если данные на самом деле стираются, но по какой-то причине он действует так, как будто пользователь полностью удалил приложение.
Есть ли что-либо в приведенном выше кодечто выглядит неправильно?Кто-нибудь может подсказать причину, по которой это может происходить?