• unity UTF8格式加载和保存xml


    UTF8格式加载xml

    string xmlPath="D:/xxx.xml"
    FileLoader fileLoader=new FileLoader();
    fileLoader.loadAsync(xmlPath);
    fileLoader.onComplete-=onloadXmlComplete;
    
    private void onloadXmlComplete(byte[][] bytesList){
    	fileLoader.onComplete-=onloadXmlComplete;
    	byte[] bytes=bytesList[0];
    	if(bytes!=null){
    		string xmlString=System.Text.Encoding.UTF8.GetString(bytes);
    		xmlDocument=new XmlDocument();
    		xmlDocument.LoadXml(xmlString);
    	}
    }
    

    UTF8格式保存xml

    xmlDocument.Save("D:/xxx.xml");
    

    FileLoader.cs

    using System;
    using System.IO;
    using System.Threading.Tasks;
    using UnityEngine;
    
    /// <summary>
    /// 文件加载器
    /// </summary>
    public class FileLoader{
    	
    	/// <summary>
    	/// 文件加载完成事件
    	/// <br>void(byte[][] bytesList)</br>
    	/// <br>bytesList:表示加载完成后各个文件的总字节(索引与加载时传递的参数对应)</br>
    	/// </summary>
    	public event Action<byte[][]> onComplete;
    	
    	private bool _isDestroyed;
    	private FileStream _fileStream;
    	private bool _isLoading;
    	
    	/// <summary>
    	/// 异步加载一个或多个本地文件
    	/// <br>如果文件不存在将在onComplete(byte[][] bytesList)事件参数bytesList添加一个null</br>
    	/// </summary>
    	/// <param name="filePaths">可变长度文件路径列表,如: @"C:UsersAdministratorDesktopviews0.xml"</param>
    	public async void loadAsync(params string[] filePaths){
    		onLoadStart();
    
    		byte[][] outBytesList=new byte[filePaths.Length][];
    		for(int i=0;i<filePaths.Length;i++){
    			byte[] buffer=null;
    			string filePath=filePaths[i];
    			await Task.Run(()=>{
    				if(File.Exists(filePath)){
    					_fileStream=File.OpenRead(filePath);
    
    					int fileLength=(int)_fileStream.Length;
    					buffer=new byte[fileLength];
    
    					_fileStream.Read(buffer,0,fileLength);
    				}
    			});
    			if(_isDestroyed){
    				//加载过程中,删除该脚本绑定的对象时,打断
    				break;
    			}
    			outBytesList[i]=buffer;
    			dispose();
    		}
    
    		//所有加载完成
    		if(!_isDestroyed){
    			onLoadCompleteAll(outBytesList);
    		}
    	}
    
    	private void onLoadStart(){
    		_isLoading=true;
    	}
    
    	private void onLoadCompleteAll(byte[][] outBytesList){
    		_isLoading=false;
    		onComplete?.Invoke(outBytesList);
    	}
    
    	private void dispose(){
    		if(_fileStream!=null){
    			_fileStream.Dispose();
    			_fileStream.Close();
    			_fileStream=null;
    		}
    	}
    	
    	public void destroy(){
    		if(_isDestroyed)return;
    		_isDestroyed=true;
    		
    		dispose();
    	}
    	
    	public bool isLoading{ get => _isLoading; }
    
    }
    
  • 相关阅读:
    通过PMP了
    VBA之自动建立连接
    从头学SQL Server2005之一:数据库引擎体系结构
    SMP、NUMA、MPP体系结构介绍【转】
    将Windows2003的RDP客户端管理应用于XP
    VBA中简单修改原有公式的宏
    各种Excel VBA的命令
    领导和管理的区别在哪里?【转】
    COM(VB/VBA/Script)利用服务标记调用WCF服务之四:使用配置文件
    2009年第一篇日志
  • 原文地址:https://www.cnblogs.com/kingBook/p/11600182.html
Copyright © 2020-2023  润新知