public static ArchiveIndexFile LoadFromFile(string dir, string yirdName = null) { ArchiveIndexFile archiveIndexFile = new ArchiveIndexFile(); if (!archiveIndexFile.Load(dir)) { return(null); } archiveIndexFile.LoadYird(dir, yirdName); return(archiveIndexFile); }
public bool WriteToFile(ArchiveObj.List serializeObjList, string yirdName, Archive.Header header, SaveRecordObj saveRecordObj) { try { if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } mIndexFile = new ArchiveIndexFile(); mIndexFile.yirdName = yirdName; mIndexFile.header = header; bool bOldIdxFileLoaded = false; ArchiveIndexFile oldIndexFile = null; Profiler.BeginSample("Archive"); serializeObjList.Foreach((serializeObj) => { bool bWrite = true; if (saveRecordObj != null) { bWrite = saveRecordObj(serializeObj); } if (bWrite) { WriteRecord(mIndexFile, serializeObj); } else { if (!bOldIdxFileLoaded) { oldIndexFile = ArchiveIndexFile.LoadFromFile(dir, yirdName); bOldIdxFileLoaded = true; } CopyIndex(mIndexFile, oldIndexFile, serializeObj); } }); Profiler.EndSample(); mIndexFile.Write(dir); } catch (Exception ex) { Debug.LogWarning(ex); return(false); } return(true); }
public bool LoadFromFile() { try { if (!Directory.Exists(dir)) { return(false); } mIndexFile = ArchiveIndexFile.LoadFromFile(dir); return(mIndexFile != null); } catch (Exception ex) { Debug.LogWarning(ex); return(false); } }
static void CopyIndex(ArchiveIndexFile indexFile, ArchiveIndexFile oldIndexFile, ArchiveObj serializeObj) { if (oldIndexFile == null) { return; } serializeObj.Foreach((obj) => { Profiler.BeginSample("only copy index:" + obj.key); ArchiveIndex index = oldIndexFile.GetArchiveIndex(obj.key); if (index != null) { indexFile.Add(obj.key, index); } Profiler.EndSample(); }); }
void WriteRecord(ArchiveIndexFile indexFile, ArchiveObj serializeObj) { if (serializeObj.hasNonYird) { string filePath = GetFilePath(dir, serializeObj.recordName); using (FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write)) { using (BinaryWriter writer = new BinaryWriter(fileStream)) { indexFile.header.Write(writer); indexFile.header.BeginWriteCheckSum(writer); serializeObj.Foreach((obj) => { if (!obj.yird) { Profiler.BeginSample("save:" + obj.key); long beginPos = fileStream.Position; obj.serialize.Serialize(new PeRecordWriter(obj.key, writer)); long endPos = fileStream.Position; indexFile.Add(obj.key, new ArchiveIndex(serializeObj.recordName, obj.yird, beginPos, endPos)); Profiler.EndSample(); } }); indexFile.header.EndWriteCheckSum(writer); } } } if (serializeObj.hasYird) { string yirdDir = indexFile.GetYirdDir(dir); string yirdFilePath = GetFilePath(yirdDir, serializeObj.recordName); if (!Directory.Exists(yirdDir)) { Directory.CreateDirectory(yirdDir); } using (FileStream yirdFileStream = new FileStream(yirdFilePath, FileMode.Create, FileAccess.Write)) { using (BinaryWriter yirdWriter = new BinaryWriter(yirdFileStream)) { indexFile.header.Write(yirdWriter); indexFile.header.BeginWriteCheckSum(yirdWriter); serializeObj.Foreach((obj) => { Profiler.BeginSample("save:" + obj.key); if (obj.yird) { long beginPos = yirdFileStream.Position; obj.serialize.Serialize(new PeRecordWriter(obj.key, yirdWriter)); long endPos = yirdFileStream.Position; indexFile.Add(obj.key, new ArchiveIndex(serializeObj.recordName, obj.yird, beginPos, endPos)); } Profiler.EndSample(); }); indexFile.header.EndWriteCheckSum(yirdWriter); } } } }