统一。安卓。更新应用后保存文件消失

Posted

技术标签:

【中文标题】统一。安卓。更新应用后保存文件消失【英文标题】:Unity. Android. Save files disappears after updating an App 【发布时间】:2016-10-11 17:46:50 【问题描述】:

我正在 Unity 中创建非常简单的游戏,并且想要节省结果、时间等。 我使用 System.IO,一切正常,但是当我从“.apk”更新我的应用程序时,所有结果都消失了。

那么如何创建更新后不会被删除的文件呢?

public static void Save()

    string[] lines = new string[] 
        Language,
        First_Test.ToString(),
        Last_Test.ToString(),
        MakeLine(ref Attention_Results),
        MakeLine(ref Memory_Results),
        MakeLine(ref Reaction_Results),
        Attention_Best.ToString(),
        Memory_Best.ToString(),
        Reaction_Best.ToString(),
        LastSend.ToString(),
        UserName,
        FlyTime.ToString() ;

    File.WriteAllLines(Application.persistentDataPath+ @"/Progres.save", lines);

【问题讨论】:

您是否有不想使用 PlayerPrefs 的特殊原因? 我需要保存数字数组,据我所知,PlayerPerfs 无法做到这一点。 你能贴出你用来保存文件的代码吗? system.io 的东西。 如果我是你,我会考虑使用 JSON 和 PlayerPrefs。这是一个免费且非常酷的 json 类,您可以统一使用 wiki.unity3d.com/index.php?title=JSONObject 基本思想是您将创建一个 json 对象,将所有数据添加到其中,然后将该对象作为单个字符串保存在 Player Prefs 中。然后要读取保存的数据,您可以从 PlayerPrefs 中获取字符串并将其转换回 JSONObject。 问题是我已经创建了具有保存、加载、修复等功能的大型类。并且在不切换到 JSON 的情况下找到解决方案将为我节省很多时间。不过谢谢你的建议,我会看的。 【参考方案1】:

编辑:根据您的需要,您可能希望更改潜在目录的顺序,甚至偏爱外部存储。如果是这样,请查看@LoungeKatt answer。

如果您不想使用 PlayerPrefs(我认为这是最强大的可用解决方案),您可以随时直接写入用户设备。

警告:请记住,这样做远非完美的解决方案!用户可以删除和编辑您保存的文件,这与其说是真正的答案,不如说是一种解决方法。

无论如何,由于内部文件目录路径从一个android设备更改为另一个,您可以使用一个小脚本找到它:

public static string GetAndroidInternalFilesDir()

    string[] potentialDirectories = new string[]
    
        "/mnt/sdcard",
        "/sdcard",
        "/storage/sdcard0",
        "/storage/sdcard1"
    ;

    if(Application.platform == RuntimePlatform.Android)
    
        for(int i = 0; i < potentialDirectories.Length; i++)
        
            if(Directory.Exists(potentialDirectories[i]))
            
                return potentialDirectories[i];
            
        
    
    return "";

希望对你有帮助,

【讨论】:

【参考方案2】:

三星和许多其他 Android 设备使用序列号作为外部 SD 卡的挂载点。基于@Kardux 对内部存储的(原始)答案,以下将支持外部存储(没有特定目录),然后搜索内部 sdcard 作为后备。

public static string GetAndroidInternalFilesDir()

    string[] potentialDirectories = new string[]
    
        "/storage",
        "/sdcard",
        "/storage/emulated/0",
        "/mnt/sdcard",
        "/storage/sdcard0",
        "/storage/sdcard1"
    ;

    if(Application.platform == RuntimePlatform.Android)
    
        for(int i = 0; i < potentialDirectories.Length; i++)
        
            if(Directory.Exists(potentialDirectories[i]))
            
                return potentialDirectories[i];
            
        
    
    return "";

注意:这假设外部存储目录首先出现在目录列表中。然后,它会根据成功的可能性对访问存储的尝试进行优先级排序,并添加/storage/emulated/0,许多设备在无法访问/sdcard 时可以访问。

【讨论】:

原谅我的无知,我无法让脚本工作,有什么指导吗? @SamuelDiaz 这是一个要添加到现有脚本并从中调用的函数。

以上是关于统一。安卓。更新应用后保存文件消失的主要内容,如果未能解决你的问题,请参考以下文章

保存后,文件从VS 2015解决方案中消失

VIM语法高亮在保存文件后消失是怎么回事?

如何将 byte[] 转换为 GameObject? (统一安卓)[重复]

文档目录中保存的数据消失

安卓应用的代码和ui等数据一般保存在啥文件夹里?怎么打开?

cdlinux系统 重启后所保存的文件都消失了,怎么回事,如何解决?