zoukankan      html  css  js  c++  java
  • 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; }
    
    }
    
  • 相关阅读:
    关于ADO.NET参数化查询的提问
    PushSharp的使用
    关于WCF的一些知识点
    关于Expression表达式树的拼接
    设计模式-策略模式
    jq图片展示插件highslide.js简单dom
    JS实现手机访问pc网址自动跳转到wap网站
    CARVARS 圆形进度条
    vue-router的几种用法
    vscode 超好用的前端插件
  • 原文地址:https://www.cnblogs.com/kingBook/p/11600182.html
Copyright © 2011-2022 走看看