From ee96f089856e01bdfefd3aa185660650bf3a533e Mon Sep 17 00:00:00 2001
From: zhengxiaofeng <1641519158@qq.com>
Date: Wed, 18 Aug 2021 22:37:24 +0800
Subject: [PATCH] =?UTF-8?q?=E3=80=90lua=E6=A1=86=E6=9E=B6=E3=80=91?=
=?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=B0=86=E5=A4=9A=E4=B8=AAlua=E8=84=9A?=
=?UTF-8?q?=E6=9C=AC=E6=89=93=E5=8C=85=E6=88=90=E4=B8=80=E4=B8=AA=E6=96=87?=
=?UTF-8?q?=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Assets/Script/Xlua/PakFile.cs | 111 +++++++++++++++++++++++++++++
Assets/Script/Xlua/PakFile.cs.meta | 11 +++
2 files changed, 122 insertions(+)
create mode 100644 Assets/Script/Xlua/PakFile.cs
create mode 100644 Assets/Script/Xlua/PakFile.cs.meta
diff --git a/Assets/Script/Xlua/PakFile.cs b/Assets/Script/Xlua/PakFile.cs
new file mode 100644
index 0000000..b4e1e88
--- /dev/null
+++ b/Assets/Script/Xlua/PakFile.cs
@@ -0,0 +1,111 @@
+using System.Collections.Generic;
+using System.Security.Cryptography;
+using System.IO;
+using ZFramework.Core;
+
+
+namespace ZFramework.XLua
+{
+ ///
+ /// 用于将多个文件合并成一个大文件,在本框架内主要的作用是见将多个lua文件合并成一个大的文件
+ ///
+ 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 _entriesMap;
+ private List _entriesList;
+ private uint _dataOffset;
+ private byte[] _data;
+
+ public uint Version
+ {
+ get
+ {
+ return _version;
+ }
+ }
+
+ private PakFile(string path, Mode mode)
+ {
+ _pakFilePath = path;
+ _mode = mode;
+ }
+
+ ///
+ /// 向大文件内增加小文件
+ ///
+ ///
+ ///
+ ///
+ 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();
+ _entriesList.Add(info);
+ }
+ }
+ }
+
+
+ ~PakFile()
+ {
+ Dispose();
+ }
+
+ public void Dispose()
+ {
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/Script/Xlua/PakFile.cs.meta b/Assets/Script/Xlua/PakFile.cs.meta
new file mode 100644
index 0000000..0e595fe
--- /dev/null
+++ b/Assets/Script/Xlua/PakFile.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8b196c97fe7ca7247bf4a136cf59e76b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
--
GitLab