public static byte[] OpenResource(string fileName, string resName) { try { PAK pak = (PAK)CollectionUtils.Get(pakRes, fileName); Stream ins = Resources.OpenStream(fileName); ArrayByte result = null; if (CACHE) { if (cacheRes == null) { cacheRes = new System.Collections.Generic.Dictionary <string, ArrayByte>( CollectionUtils.INITIAL_CAPACITY); } result = (ArrayByte)CollectionUtils.Get(cacheRes, fileName); if (result == null) { result = new ArrayByte(ins, ArrayByte.LITTLE_ENDIAN); CollectionUtils.Put(cacheRes, fileName, result); } else { result.Reset(ArrayByte.LITTLE_ENDIAN); } } else { result = new ArrayByte(ins, ArrayByte.LITTLE_ENDIAN); } if (pak == null) { pak = new PAK(); LPKHeader header = ReadHeader(result); pak.tables = ReadLPKTable(result, (int)header.GetTables()); pak.head_size = (int)(LPKHeader.Size() + header.GetTables() * LPKTable.Size()); pak.skip = result.Position(); pak.length = result.Length(); CollectionUtils.Put(pakRes, fileName, pak); } else { result.SetPosition(pak.skip); } bool find = false; int fileIndex = 0; string innerName = null; LPKTable[] tables_0 = pak.tables; int size = tables_0.Length; for (int i = 0; i < size; i++) { innerName = tables_0[i].GetFileName(); if (resName.Equals(innerName, System.StringComparison.InvariantCultureIgnoreCase)) { find = true; fileIndex = i; break; } } if (!find) { throw new Exception("File not found. ( " + fileName + " )"); } else { return(ReadFileFromPak(result, pak.head_size, tables_0[fileIndex])); } } catch (Exception) { throw new Exception("File not found. ( " + fileName + " )"); } }
/// <summary> /// 获得指定头文件的偏移长度 /// </summary> /// /// <param name="header"></param> /// <returns></returns> public static long OutputOffset(LPKHeader header) { return(LPKHeader.Size() + header.GetTables() * LPKTable.Size()); }