public void LoadAndCleanSwap(ESave eSave) { mSwapSpace.Init(); //mSwapSpace.Init(Path.Combine(GetArchiveRootDir(), "swap")); string dir = Load(eSave); if (!string.IsNullOrEmpty(dir)) { Archive.Header header = mCurArchive.GetHeader(); mSwapSpace.CopyFrom(dir, (fileInfo) => { try{ using (FileStream fs = fileInfo.Open(FileMode.Open, FileAccess.Read, FileShare.Read)) { using (BinaryReader r = new BinaryReader(fs)) { Archive.Header other = new Archive.Header(); if (other.Read(r)) { if (header.IsMatch(other)) { return(true); } } } } }catch (System.Exception e) { Debug.LogWarning("[LoadAndCleanSwap]" + e); } return(false); }); } }
static bool Write(Archive.Header header, string path, Dictionary <string, ArchiveIndex> dic) { try { using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write)) { using (BinaryWriter bw = new BinaryWriter(fs)) { header.Write(bw); header.BeginWriteCheckSum(bw); bw.Write((int)dic.Count); foreach (KeyValuePair <string, ArchiveIndex> kvp in dic) { bw.Write(kvp.Key); kvp.Value.Write(bw); } header.EndWriteCheckSum(bw); } } } catch (Exception ex) { Debug.LogWarning(ex); return(false); } return(true); }
void SaveArchive(ESave eSave) { eventor.Dispatch(new ArchiveEvent() { eSave = eSave }); string dir = CreateCurArchive(eSave); Archive.Header header = GetHeader(eSave); if (header == null) { header = new Archive.Header(); header.NewGuid(); SetHeader(eSave, header); if (!mSwapSpace.CopyTo(dir, (fileInfo) => { using (FileStream fs = fileInfo.Open(FileMode.Open, FileAccess.Write)){ using (BinaryWriter w = new BinaryWriter(fs)){ header.Write(w); } } })) { Debug.LogError("[Save]:Failed to save game at " + eSave); return; // Failed to save } } Profiler.BeginSample("write archive:" + eSave); mCurArchive.WriteToFile(mArchiveObjList, yirdName, header, (recordObj) => { if (eSave >= ESave.MinAuto && eSave < ESave.MaxAuto) { bool saveFlag = recordObj.GetSaveFlag(eSave); recordObj.ResetSaveFlag(eSave); return(saveFlag); } else { return(true); } }); Profiler.EndSample(); //Profiler.BeginSample("sync swap :"); //mSwapSpace.Sync(mCurArchive.dir); //Profiler.EndSample(); }
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 LoadYird(string dir, string yirdName) { if (string.IsNullOrEmpty(yirdName)) { return(false); } mYirdName = yirdName; string path = GetIndexFilePath(GetYirdDir(dir)); Archive.Header yirdHeader = Load(path, mYirdDicIndex, header); if (yirdHeader == null) { return(false); } return(true); }
public bool Open() { try { string filePath = Archive.GetFilePath(mPath, mIndex.fileName); if (!File.Exists(filePath)) { Debug.LogError("file not exist:" + filePath); return(false); } mFileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read); mReader = new BinaryReader(mFileStream); Archive.Header header = new Archive.Header(); if (!header.Read(mReader) || !header.IsMatch(mHeader)) { mReader.Close(); mReader = null; mFileStream.Close(); mFileStream = null; return(false); } mFileStream.Seek(mIndex.beginPos, SeekOrigin.Begin); return(true); } catch (Exception ex) { Debug.LogWarning(ex); return(false); } }
public int GetCurArvhiveVersion() { Archive.Header header = mCurArchive.GetHeader(); return(header.version); }
void SetHeader(ESave eSave, Archive.Header header) { mArchiveHeaders[eSave - ESave.Min] = header; }
public PeRecordReader(ArchiveIndex index, string path, Archive.Header header) { mPath = path; mIndex = index; mHeader = header; }