使用二进制实现本地数据保存和读取(C# , Unity)

版权声明:快乐源于分享,转载请附链接,,, https://blog.csdn.net/Czhenya/article/details/81531656

以二进制实现本地数据保存和读取,,,

项目中要存个本地文件,本来想使用Json 的,,可是怎么也没实现了,Json 好像只能存储string类型 -->(Dictionary<string, string> )1,,,没做出来,觉得XML读取费劲,最后决定使用二进制的形式存储为 .txt格式的,,,嗯,效果还可以,,,分享一下…


下面是存储和读取的代码:

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using UnityEngine;
using UnityEngine.UI;

public class LobbyMiddleRightView : MonoBehaviour {

    public GameObject DownLoadObj;

    private string filePath;

    private LocalDataObject localDataObject  = new LocalDataObject();

    /// <summary>
    /// 初始化
    /// </summary>
    public void Init()
    {
        filePath = Application.dataPath + "/StreamingFile" + "/LocalData.txt";
      
        localDataObject.iconPos.Add(1, "AAA");
        localDataObject.iconPos.Add(2, "BBB");
        localDataObject.iconPos.Add(3, "CCC");
        localDataObject.iconPos.Add(4, "DDD");
        localDataObject.iconPos.Add(5, "EEE");
        localDataObject.iconPos.Add(6, "FFF");

        localDataObject.isDownLoad.Add(1,true);
        localDataObject.isDownLoad.Add(2,true);
        localDataObject.isDownLoad.Add(3,true);
        localDataObject.isDownLoad.Add(4,true);
        localDataObject.isDownLoad.Add(5,true);
        localDataObject.isDownLoad.Add(6,true);
    }


    /// <summary>
    /// 以二进制形式 保存到本地
    /// </summary>
    private void Save()
    {
        //二进制格式化程序
        BinaryFormatter bf = new BinaryFormatter();
        //创建流文件
        FileStream fileStream = File.Create(filePath);
        //序列化
        bf.Serialize(fileStream, localDataObject);

        fileStream.Close();

        if (File.Exists(filePath))
        {
            Debug.Log("保存成功");
        }
    }


    /// <summary>
    /// 读取本地文件
    /// </summary>
    private void Read()
    {
        if (File.Exists(filePath))
        {
            BinaryFormatter bf = new BinaryFormatter();
            FileStream filestream = File.Open(filePath, FileMode.Open);
            LocalDataObject localDataObject = (LocalDataObject)bf.Deserialize(filestream);
            filestream.Close();

            Debug.Log("本地文件读取成功:  ");
            foreach (var key in localDataObject.iconPos.Keys)
            {
                 Debug.Log(key + "  "+ localDataObject.iconPos[key]);
            }
            foreach (var key in localDataObject.isDownLoad.Keys)
            {
                Debug.Log(key + "  " + localDataObject.isDownLoad[key]);
            }
        }
        else
        {
           Debug.Log("不存在存档");
        }
    }
}

/// <summary>
/// 本地数据对象
/// </summary>
[Serializable]
public class LocalDataObject
{ 
    //使用Json,只能存储string类型 -->(Dictionary<string, string> )
    public Dictionary<int, string> iconPos = new Dictionary<int, string>();
    public Dictionary<int, bool> isDownLoad = new Dictionary<int, bool>();
}



  1. 可能有别的方式实现我没找到吧 … ↩︎

猜你喜欢

转载自blog.csdn.net/Czhenya/article/details/81531656
今日推荐