예제 #1
0
        internal static bool SaveFileCoreWithEncoding(Form1 form, String fileName, String text, bool savingAll = false)
        {
            XtraTabControl pagesTabControl = form.pagesTabControl;

            bool         success    = true;
            FileStream   fileStream = null;
            StreamWriter textFile   = null;

            try
            {
                Encoding fileEncoding = EncodingUtil.GetDefaultEncoding();

                if (pagesTabControl != null)
                {
                    fileEncoding = TabUtil.GetTabTextEncoding(pagesTabControl.SelectedTabPage);
                }

                if (fileName.EndsWith(".xml"))
                {
                    try
                    {
                        byte[]   byteArray = fileEncoding.GetBytes(text);
                        Encoding xmlEncoding;

                        using (MemoryStream stream = new MemoryStream(byteArray))
                        {
                            using (XmlTextReader xmlreader = new XmlTextReader(stream))
                            {
                                xmlreader.MoveToContent();
                                xmlEncoding = xmlreader.Encoding;
                            }
                        }

                        if (fileEncoding.GetType() != xmlEncoding.GetType())
                        {
                            TabsUpdate(pagesTabControl, savingAll, UpdatePhase.End);   //Useful to save all execution
                            WindowManager.ShowInfoBox(form, LanguageUtil.GetCurrentLanguageString("EncodingXmlToSave", className));
                            TabsUpdate(pagesTabControl, savingAll, UpdatePhase.Begin); //Useful to save all execution

                            fileEncoding = xmlEncoding;
                        }

                        if (!XmlValidator.Validate(form, ValidationType.DTD, false, fileEncoding))
                        {
                            throw new FakeException();
                        }
                    }
                    catch (Exception)
                    {
                        TabsUpdate(pagesTabControl, savingAll, UpdatePhase.End);   //Useful to save all execution
                        DialogResult questionResult = WindowManager.ShowQuestionBox(form, LanguageUtil.GetCurrentLanguageString("InvalidXmlToSave", className));
                        TabsUpdate(pagesTabControl, savingAll, UpdatePhase.Begin); //Useful to save all execution

                        if (questionResult == DialogResult.No)
                        {
                            throw;
                        }
                    }

                    //if (!XmlValidator.Validate(form, ValidationType.DTD, false))
                    //{
                    //    if (WindowManager.ShowQuestionBox(form, LanguageUtil.GetCurrentLanguageString("InvalidXmlToSave", className)) == DialogResult.No)
                    //    {
                    //        throw new FakeException();
                    //    }
                    //}
                    //else
                    //{
                    //    byte[] byteArray = fileEncoding.GetBytes(text);
                    //    Encoding xmlEncoding;

                    //    using (var stream = new MemoryStream(byteArray))
                    //    {
                    //        using (var xmlreader = new XmlTextReader(stream))
                    //        {
                    //            xmlreader.MoveToContent();
                    //            xmlEncoding = xmlreader.Encoding;
                    //        }
                    //    }

                    //    if (fileEncoding.GetType() != xmlEncoding.GetType())
                    //    {
                    //        WindowManager.ShowInfoBox(form, LanguageUtil.GetCurrentLanguageString("EncodingXmlToSave", className));
                    //        fileEncoding = xmlEncoding;
                    //    }
                    //}
                }

                fileStream = File.Create(fileName);
                textFile   = new StreamWriter(fileStream, fileEncoding);
                textFile.Write(text.Replace(ConstantUtil.newLine, Environment.NewLine));

                TabUtil.SetTabTextEncoding(pagesTabControl.SelectedTabPage, fileEncoding);
            }
            catch (UnauthorizedAccessException)
            {
                Form form1 = null;
                if (pagesTabControl != null)
                {
                    form1 = pagesTabControl.FindForm();
                }

                WindowManager.ShowAlertBox(form1, LanguageUtil.GetCurrentLanguageString("UnauthorizedAccess", className));
                success = false;
            }
            catch (FakeException)
            {
                success = false;
            }
            finally
            {
                if (textFile != null)
                {
                    textFile.Close();
                }
                if (fileStream != null)
                {
                    fileStream.Close();
                }
            }

            return(success);
        }