Beispiel #1
0
        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);
                        }
                    }
                }
            }
        }