public void Save(ConfigurationResponse configurationResponse) { var tempFilePath = this.GetConfigTempFilePath(configurationResponse); var tempTokenPath = tempFilePath + tokenFileExt; using (var fileStream = File.OpenWrite(tempFilePath)) { if (fileStream.Length > configurationResponse.StartPosition) { fileStream.SetLength(configurationResponse.StartPosition); } fileStream.Seek(configurationResponse.StartPosition, SeekOrigin.Begin); fileStream.Write(configurationResponse.Stream, 0, configurationResponse.Stream.Length); //configurationResponse.Stream.CopyTo(fileStream); } if (configurationResponse.StartPosition == 0) { FileSystemHelper.WriteAllText(tempTokenPath, configurationResponse.Token); } if (configurationResponse.IsFinal) { var configPath = this.GetConfigFilePath(configurationResponse); var configTokenPath = configPath + tokenFileExt; var bakFile = configPath + ".bak"; var bakTokenFile = configTokenPath + ".bak"; if (File.Exists(configPath)) { FileSystemHelper.DeleteFile(bakFile); FileSystemHelper.MoveFile(configPath, bakFile); } FileSystemHelper.DeleteFile(configPath); FileSystemHelper.MoveFile(tempFilePath, configPath); FileSystemHelper.DeleteFile(tempFilePath); if (File.Exists(configTokenPath)) { FileSystemHelper.DeleteFile(bakTokenFile); FileSystemHelper.MoveFile(configTokenPath, bakTokenFile); } FileSystemHelper.DeleteFile(configTokenPath); FileSystemHelper.MoveFile(tempTokenPath, configTokenPath); FileSystemHelper.DeleteFile(tempTokenPath); // нотификации foreach (var subscriber in subscribers) { if (subscriber.ProviderKey == configurationResponse.ProviderKey) { try { subscriber.OnUpdate(() => File.OpenRead(configPath)); } catch (Exception) { // TODO instrumentation // ignore ? //throw; } } } } else { } }
private string GetConfigFilePath(ConfigurationResponse configurationResponse) { return(Path.Combine(this.configsDir, configurationResponse.ProviderKey + configExt)); }