提交 ee96f089 编写于 作者: Z zhengxiaofeng

【lua框架】提交将多个lua脚本打包成一个文件

上级 f8d4540c
using System.Collections.Generic;
using System.Security.Cryptography;
using System.IO;
using ZFramework.Core;
namespace ZFramework.XLua
{
/// <summary>
/// 用于将多个文件合并成一个大文件,在本框架内主要的作用是见将多个lua文件合并成一个大的文件
/// </summary>
public class PakFile:System.IDisposable
{
public enum Mode
{
Read,
Write
}
private struct PakEntry
{
public string name;
public uint offset;
public uint size;
}
private string _pakFilePath;
private Mode _mode;
private uint _version;
private byte[] _md5;
private Dictionary<string, PakEntry> _entriesMap;
private List<PakEntry> _entriesList;
private uint _dataOffset;
private byte[] _data;
public uint Version
{
get
{
return _version;
}
}
private PakFile(string path, Mode mode)
{
_pakFilePath = path;
_mode = mode;
}
/// <summary>
/// 向大文件内增加小文件
/// </summary>
/// <param name="path"></param>
/// <param name="relativeRootPath"></param>
/// <param name="pathSepInName"></param>
public void AppendFile(string path,string relativeRootPath = null, char pathSepInName ='.')
{
if (!string.IsNullOrEmpty(path))
{
path = path.Replace('\\', '/');
using (FileStream fileStream = new FileStream(path, FileMode.Open))
{
PakEntry info;
if (string.IsNullOrEmpty(relativeRootPath))
{
int si = path.LastIndexOf('/');
int ei = path.LastIndexOf('.');
info.name = path.Substring(si + 1, ei - si - 1);
}
else
{
int si = path.LastIndexOf(relativeRootPath) + relativeRootPath.Length;
int ei = path.LastIndexOf('.');
info.name = path.Substring(si + 1, ei - si - 1);
info.name = info.name.Replace('/', pathSepInName);
}
info.offset = 0;
info.size = (uint) fileStream.Length;
byte[] data = new byte[info.size];
fileStream.Read(data, 0, (int) info.size);
if (_data == null)
{
_data = data;
}
else
{
int srcOffset = _data.Length;
System.Array.Resize(ref _data, _data.Length + data.Length);
System.Buffer.BlockCopy(data, 0, _data, srcOffset, data.Length);
}
if (_entriesList == null)
_entriesList = new List<PakEntry>();
_entriesList.Add(info);
}
}
}
~PakFile()
{
Dispose();
}
public void Dispose()
{
}
}
}
\ No newline at end of file
fileFormatVersion: 2
guid: 8b196c97fe7ca7247bf4a136cf59e76b
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册