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(); }