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

2021-03-10 10:29发布

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

项目中要存个本地文件,本来想使用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>();

}


//写入到本地

void Write(){

        StreamWriter sw;

        FileInfo fi = new FileInfo(Application.persistentDataPath + filename+ ".txt");

        sw = fi.CreateText();

        sw.Write(getDefaultRuleString());

        sw.Close();

        sw.Dispose();

}


void Read(){

        string readContext = "";//读取内容

        StreamReader sr;

        FileInfo fi = new FileInfo(Application.persistentDataPath + filename+ ".txt");

        if (fi.Exists) //若存在

        {

            sr = fi.OpenText();

            readContext = sr.ReadToEnd();

            sr.Close();

            sr.Dispose();

        }

}



————————————————

版权声明:本文为CSDN博主「妳是我改卟了的bug」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/Czhenya/article/details/81531656