unity文件读取与写入

using System;
using System.IO;
using UnityEngine;

public class FileReaderAndWriter : MonoSingleton<FileReaderAndWriter>
{
    /// <summary>
    /// 以二进制的方式保存文件
    /// </summary>
    /// <param name="filename">文件名,包含文件路径</param>
    /// <param name="content">二进制数据</param>
    /// <param name="append">追加?创建/覆盖</param>
    /// <param name="successCallback">保存成功事件</param>
    /// <param name="errorCallback">保存失败事件</param>
    public void SaveBinaryFile(string filename, byte[] content, bool append = false, Action successCallback = null, Action<Exception> errorCallback = null)
    {
        try
        {
            // 确保文件路径存在
            string directory = Path.GetDirectoryName(filename);
            if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
            {
                Directory.CreateDirectory(directory);
            }

            // 写入二进制文件内容(末尾追加,创建/覆盖)
            using (FileStream fs = new FileStream(filename, append ? FileMode.Append : FileMode.Create, FileAccess.Write))
            {
                fs.Write(content, 0, content.Length);
            }

            // 检查文件是否存在
            if (File.Exists(filename))
            {
                Debug.Log("文件已保存:" + filename);
                successCallback?.Invoke(); // 调用成功回调函数
            }
            else
            {
                Debug.Log("文件保存失败:" + filename);
                errorCallback?.Invoke(new Exception("文件保存失败")); // 调用失败回调函数
            }
        }
        catch (Exception ex)
        {
            Debug.Log("文件保存失败:" + filename + ", 错误信息: " + ex.Message);
            errorCallback?.Invoke(ex); // 调用失败回调函数
        }
    }

    /// <summary>
    /// 以二进制的方式读取文件
    /// </summary>
    /// <param name="filePath">文件路径,包括文件名</param>
    /// <param name="onSuccess">读取成功事件</param>
    /// <param name="onFailure">读取失败事件</param>
    public void ReadBinaryFile(string filePath, Action<byte[]> onSuccess, Action<string> onFailure)
    {
        try
        {
            // 使用FileStream打开文件
            using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
                // 创建BinaryReader实例
                using (BinaryReader reader = new BinaryReader(fs))
                {
                    // 读取整个文件的字节数组
                    byte[] fileData = reader.ReadBytes((int)fs.Length);
                    // 根据需要解析字节数组
                    // 这里仅打印字节数组作为示例
                    Debug.Log("File data (bytes):");
                    foreach (byte b in fileData)
                    {
                        Debug.Log(b);
                    }
                    // 调用成功回调方法
                    onSuccess?.Invoke(fileData);
                }
            }
        }
        catch (Exception ex)
        {
            Debug.LogError("Error reading file: " + ex.Message);
            // 调用失败回调方法
            onFailure?.Invoke(ex.Message);
        }
    }
}

在给定的代码中,FileReaderAndWriter 类提供了两个主要方法:SaveBinaryFile 和 ReadBinaryFile,分别用于以二进制方式保存和读取文件。下面是对这两个方法的详细解释,以及如何使用它们。

SaveBinaryFile 方法

SaveBinaryFile 方法用于将二进制数据保存到指定的文件中。该方法的签名如下:

public void SaveBinaryFile(string filename, byte[] content, bool append = false, Action successCallback = null, Action<Exception> errorCallback = null)
  • 参数:

    • filename: 文件名,包含文件路径。
    • content: 要保存的二进制数据。
    • append: 是否追加到文件末尾。如果为 false,则创建或覆盖文件。
    • successCallback: 保存成功时调用的回调函数。
    • errorCallback: 保存失败时调用的回调函数。
  • 实现细节:

    1. 确保文件路径存在: 使用 Path.GetDirectoryName 获取文件路径,并检查该路径是否存在。如果不存在,则创建该路径。
    2. 写入二进制文件内容: 使用 FileStream 打开文件,指定打开模式为 FileMode.Append 或 FileMode.Create,以及访问模式为 FileAccess.Write。然后,将二进制数据写入文件。
    3. 检查文件是否存在: 写入完成后,检查文件是否存在。如果存在,则调用 successCallback;否则,调用 errorCallback
    4. 异常处理: 捕获并处理所有可能的异常,调用 errorCallback 并传递异常信息。

ReadBinaryFile 方法

ReadBinaryFile 方法用于从指定的文件中读取二进制数据。该方法的签名如下:

public void ReadBinaryFile(string filePath, Action<byte[]> onSuccess, Action<string> onFailure)
  • 参数:

    • filePath: 文件路径,包括文件名。
    • onSuccess: 读取成功时调用的回调函数,传递读取到的二进制数据。
    • onFailure: 读取失败时调用的回调函数,传递错误信息。
  • 实现细节:

    1. 打开文件: 使用 FileStream 打开文件,指定打开模式为 FileMode.Open 和访问模式为 FileAccess.Read
    2. 读取二进制数据: 使用 BinaryReader 从文件中读取二进制数据。
    3. 关闭资源: 读取完成后,关闭 BinaryReader 和 FileStream
    4. 异常处理: 捕获并处理所有可能的异常,调用 onFailure 并传递错误信息。

使用示例

以下是如何使用 FileReaderAndWriter 类中的两个方法的示例:

using System;
using UnityEngine;

public class ExampleUsage : MonoBehaviour
{
    private void Start()
    {
        // 创建 FileReaderAndWriter 实例
        FileReaderAndWriter fileReaderAndWriter = FileReaderAndWriter.Instance;

        // 要保存的二进制数据
        byte[] dataToSave = new byte[] { 1, 2, 3, 4, 5 };

        // 保存文件
        fileReaderAndWriter.SaveBinaryFile("Assets/Example.bin", dataToSave, false,
            () => Debug.Log("文件保存成功"),
            (ex) => Debug.LogError("文件保存失败: " + ex.Message));

        // 读取文件
        fileReaderAndWriter.ReadBinaryFile("Assets/Example.bin",
            (data) =>
            {
                Debug.Log("文件读取成功");
                foreach (byte b in data)
                {
                    Debug.Log(b);
                }
            },
            (error) => Debug.LogError("文件读取失败: " + error));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值