我的Android应用中发生了什么事情,导致其丢失了数据?

时间:2019-03-01 23:24:24

标签: android file filesystems commit

我有一个Android应用。我有几个经常出现问题的用户:当应用程序关闭时,保存的每个文件都消失了。创建的每个文件夹都消失了。一切都完全抹平了。

在每个过渡和游戏事件期间,我都会仔细保存游戏数据,因此,我很有信心,这不是用户在写入数据之前崩溃的情况。从某种程度上说,正在写入的数据只是在从内存中删除应用程序之后才持久保存。

所以-有人遇到这种情况并解决了吗?我只能想象的是,在写完文件后我需要调用某种“ filesystem.commit”命令,但是我找不到任何地方记录的文件。

请帮助!

(编辑)我正在使用本机代码读取和写入文件。我用来写文件的代码是这样的:

bool WriteFile(char *theFilename, char *theDataPtr, int theLen)
{
    FILE* aFile=fopen(theFilename,"w+");
    if(!aFile) {Alert("unable to create file %s with error %d", theFilename, errno);return false;}

    if(aFile) fclose(aFile);
    aFile=fopen(theFilename,"w+b");
    if(!aFile) {Alert ("unable to open file %s", theFilename);return false;}
    if (aFile)
    {
        fwrite(theDataPtr, 1, theLen,aFile);
        fclose(aFile);
        return true;
    }

    return false;
}

注意:没有客户报告任何警报弹出窗口,它们只是正常的Android消息框。还要注意,该代码几乎可以在所有其他系统上使用-只有少数客户可以获取擦除的数据,所以我想知道这是怪异的安全性还是我需要做的一些额外步骤才能与所有系统100%兼容。

(编辑)更多信息...这是我用来获取应用程序存储路径的Java代码...我尝试编写的所有文件都放在此文件夹中。

private void SetFilePath() 
{
    String storagePath = getFilesDir().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");
    }

    SetFilePathNative(storagePath); // Tells the native code the path
    mStorageDir = storagePath;
}

0 个答案:

没有答案