From e1b0e5249eb21b9135a5b95cabd769611f56be6d Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Tue, 27 Mar 2012 19:13:34 +0200 Subject: [PATCH] Save docking layout into memory stream first, then write the contents to file. This prevents corruption when there is an exception saving the layout. --- .../Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs index eb91c80553..14109b93fd 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs @@ -320,8 +320,14 @@ namespace ICSharpCode.SharpDevelop.Gui Directory.CreateDirectory(configPath); string fileName = Path.Combine(configPath, current.FileName); LoggingService.Info("Saving layout file: " + fileName); + // Save docking layout into memory stream first, then write the contents to file. + // This prevents corruption when there is an exception saving the layout. + var memoryStream = new MemoryStream(); + dockingManager.SaveLayout(memoryStream); + memoryStream.Position = 0; try { - dockingManager.SaveLayout(fileName); + using (FileStream stream = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite)) + memoryStream.CopyTo(stream); } catch (IOException ex) { // ignore IO errors (maybe switching layout in two SharpDevelop instances at once?) LoggingService.Warn(ex);