4
MacroFile
李若辰 edited this page 2026-03-17 13:53:31 +08:00

返回

文件宏包含预设常用的文件写入,读取操作,并自动解决文件不存在的问题,通过返回布尔状态来快速判断解决。

文件系统基于多态行为模式构建,使用 CrossPlatformFileHandle.ActiveHandle 获取当前系统上激活的文件管理器句柄,所有文件系统都可以使用从文本,字节码的方式中同步读取读写,异步读写,总共八种模式。

  • ReadTextFromFile:同步读
  • ReadBytesFormFile:同步读字节码
  • WriteTextIntoFile:同步写
  • WriteByteIntoFile:同步写字节码
  • AsyncReadTextFromFile:异步读
  • AsyncReadBytesFromFile:异步读字节码
  • AsyncWriteTextIntoFile:异步写
  • AsyncWriteBytesIntoFile:异步写字节码

所有文件操作函数都使用绝对路径,所以还需要路径处理函数:

  • CombinePath:直接拼接两个路径
  • CombineStreamingAssets:拼接到streamingAssets路径
  • ~其他路径类似
  • CombineCustomRelativePath:拼接到预定义的路径上

你可以不用关心当前的平台,CrossPlatformFileHandle会自动根据当前运行平台在windows,webGL,android之间进行切换,后续可能会添加更多的平台。

文件句柄仅仅只是为了处理一些文件读写操作的,所以暂时还没有提供比如检查文件是否存在的逻辑,所有功能都是围绕上述8个文件方法实现的。

下面是一个示例:

// ==== 同步读取 ==== 
CrossPlatformFileHandle.ActiveFileHandle.ReadTextFromFile("absolute file path", out string content);
// ==== 同步写入 ==== 
CrossPlatformFileHandle.ActiveFileHandle.WriteTextIntoFile("absolute file path", string content);
// ==== 异步读取 ==== 
var isCompleteRead = await CrossPlatformFileHandle.ActiveFileHandle.AsyncReadTextFromFile("absolute file path", 
s => 
{
        // 成功读取文件
}, 
s => 
{
	// 读取失败,原因是 s
	Debug.ErrorLog(s);
});
// ==== 异步写入 ==== 
var isCompleteWrite = await CrossPlatformFileHandle.ActiveFileHandle.AsyncWriteTextIntoFile("absolute file path", 
null, // 成功写入文件,但是无需处理
null); // 写入失败,但是无需处理
// 异步方法包含回调函数处理,也可通过返回布尔值判断文件写入是否成功。

同时,文件句柄也提供了相对路径拼接:

// 返回steamingAssets下的myFile.json文件路径
CrossPlatformFileHandle.ActiveFileHandle.CombineStreamingAssets("myFile.json");

添加了XericSerializerFormatter序列化器,用于通配处理多种序列化器目标。 目前默认提供了 Json格式化 和 bin格式化 。
下面展示如何使用:

List<int> obj = new List<int>() { 1, 2, 3};
// 序列化目标
var content = JsonSerializerFormatter.formatter.Serializer(obj);
// 反序列化目标
obj = JsonSerializerFormatter.Deserializer.Serializer(content);

为了方便使用,文件句柄支持填入序列化器来实现更多的格式:

// 类型太长了可以使用声名简化
using static XericLibrary.Runtime.MacroLibrary.MacroFile.CrossPlatformFileHandle;
using static XericLibrary.Runtime.MacroLibrary.MacroFile.JsonSerializerFormatter;

ActiveFileHandle.AsyncWriteXIntoFile(
	ActiveFileHandle.CombineStreamingAssets("myFile.json"), 
	uriConfig, null, s => Debug.LogError(s), formatter);

下面这些函数api已经过时,他们不会因为过时而被移除,但是也不建议使用。

  • GetStreamingFile:获取streamingAssets文件目录
  • GetDataPathFile:获取DataPath文件目录
  • GetPersistentDataPath:获取PersistentDataPath文件目录
  • WirteFile:直接向absFilePath的文件写入writeText,如果文件不存在就创建这个文件
  • ReadFile:读取absFilePath的文件
  • FileExists:检查 fileName 文件是否存在

下面这些函数api已经过时,并且计划移除

  • SaveObjectToJsonFile:直接将文件序列化为json并保存到absfilePath
  • ReadObjectFormJsonFile:直接读取absfilePath文件并序列化为对象