public void OpenStorage(bool initOrOpen) { AssertNotDisposed(); if (!File.Exists(_tagFile)) { if (!initOrOpen) { throw new Exception("Vault root path does not contain vault data"); } InitStorage(false); } var tagVers = File.ReadAllText(_tagFile); if (TAG_VERS != tagVers) { throw new Exception("Vault version mismatch"); } if (File.Exists(_vaultFile)) { using (var s = new FileStream(_vaultFile, FileMode.Open)) { _vaultMeta = JsonHelper.Load <EntityMeta <VaultInfo> >(s); } } IsStorageOpen = true; }
public void SaveVault(VaultInfo vault) { AssertOpen(); var now = DateTime.Now; var who = $"{Environment.UserDomainName}\\{Environment.UserName}"; if (_vaultMeta == null) { _vaultMeta = new EntityMeta <VaultInfo> { CreateDate = now, CreateUser = who, CreateHost = Environment.MachineName, } } ; _vaultMeta.UpdateDate = now; _vaultMeta.UpdateUser = who; _vaultMeta.Entity = vault; // Create a backup just in case there's any fault if (File.Exists(_vaultFile)) { File.Copy(_vaultFile, $"{_vaultFile}.bak", true); } // Sort of a 2-phase commit var tmp = $"{_vaultFile}.tmp{DateTime.Now.ToFileTime()}"; using (var s = new FileStream(tmp, FileMode.Create)) { JsonHelper.Save(s, _vaultMeta, false); } // Now commit the changes File.Copy(tmp, _vaultFile, true); File.Delete(tmp); }