static OverwritePromptResult OverwritePrompt(string filename) { OverwriteDialog dialog; while (true) { dialog = new OverwriteDialog(filename); dialog.ShowDialog(); if (dialog.inputOk) { break; } } OverwritePromptResult res = new OverwritePromptResult(); res.overwrite = dialog.overwrite; res.forAll = dialog.forAll; return(res); }
bool SaveXML(XmlDocument doc, string filename) { if (File.Exists(filename)) { if (!overwriteAll && !dontOverwriteAll) { outputStream.Write($"{ToRelativePath(filename)} already exists. Overwrite? : "); while (true) { OverwritePromptResult result = new OverwritePromptResult(); if (overwritePrompt != null) { result = overwritePrompt(filename); } if (result.overwrite) { if (result.forAll) { overwriteAll = true; } outputStream.WriteLine("Overwriting"); break; } else if (!result.overwrite) { if (result.forAll) { dontOverwriteAll = true; } outputStream.WriteLine("File not saved"); return(false); } } } else { if (overwriteAll) { outputStream.Write($"{ToRelativePath(filename)} already exists. "); outputStream.WriteLine("Overwriting."); } else if (dontOverwriteAll) { outputStream.Write($"{ToRelativePath(filename)} already exists. "); outputStream.WriteLine("Not saved."); return(false); } } } while (true) { try { StreamWriter outStream = new StreamWriter(filename); doc.Save(outStream); outStream.Close(); outputStream.WriteLine("Saved."); return(true); } catch (Exception e) { outputStream.WriteLine($"Saving {ToRelativePath(filename)} failed ({e.Message})"); if (consoleOnly) { return(false); } outputStream.Write("Retry? [y/n]:"); while (true) { int cursorLeftPos = Console.CursorLeft; ConsoleKeyInfo key = Console.ReadKey(); Console.SetCursorPosition(cursorLeftPos, Console.CursorTop); if (key.Key == ConsoleKey.Y) { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Retrying"); Console.ResetColor(); break; } else if (key.Key == ConsoleKey.N) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("File not saved"); Console.ResetColor(); return(false); } } } } }