什么可能导致Android应用程序中全部灾难性的文件/数据丢失?

时间:2019-03-09 11:03:58

标签: java android c++ file android-ndk

我有一个使用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;
}

我的一些用户正在发生什么事情(这是非常罕见的),他们将运行该应用程序,并且在数小时或数天或一段时间内一切正常。然后,突然之间,有一天他们将打开该应用程序,并且所有内容都将消失-一切将被完全擦除,并且上述函数检索到的存储路径将完全为空。

我不知道返回的路径是否正在更改,以便它指向一个新位置,或者数据实际上是否已被擦除,但是由于某种原因,它的作用就像用户完全卸载了该应用程序一样。

上面的代码有什么地方看起来不对吗?谁能暗示这可能发生的原因?

0 个答案:

没有答案