コード例 #1
0
        /// <summary>
        ///   The do close output.
        /// </summary>
        private void DoCloseOutput()
        {
            if (writer != null)
            {
                try
                {
                    writer.Close();
                }
                catch
                {
                }

                writer = null;
            }

            if (outputStream != null)
            {
                try
                {
                    outputStream.Close();
                }
                catch
                {
                }

                outputStream = null;
            }
        }
コード例 #2
0
        /// <summary>
        ///   The ensure write.
        /// </summary>
        private void EnsureWrite()
        {
            if (writer == null)
            {
                if (reader == null)
                {
                    throw new InvalidOperationException("Недоступен базовый объект сериализации");
                }

                if (reader.MoveToContent() != XmlNodeType.Element)
                {
                    throw new InvalidOperationException("Ошибка чтения базового объекта сериализации");
                }

                outputStream = new FileStreamFoms(TargetFilePath, FileMode.Create, FileAccess.Write, FileShare.Read);
                var settings = new XmlWriterSettings
                {
                    Encoding           = Encoding.Default,
                    Indent             = false,
                    NewLineHandling    = NewLineHandling.Replace,
                    NewLineChars       = string.Empty,
                    OmitXmlDeclaration = false
                };
                writer = XmlWriter.Create(outputStream, settings);
                writer.WriteStartElement(reader.Prefix, reader.LocalName, reader.NamespaceURI);
                if (reader.MoveToFirstAttribute())
                {
                    do
                    {
                        if (string.Compare(reader.Name, "xmlns", StringComparison.Ordinal) != 0)
                        {
                            writer.WriteAttributeString(reader.Prefix, reader.LocalName, reader.NamespaceURI, reader.Value);
                        }
                    }while (reader.MoveToNextAttribute());
                }

                if (LookNearNode() != Hl7Node.Header)
                {
                    DoClose();
                    throw new InvalidOperationException("Ошибка чтения корневого узла Hl7");
                }

                var defattr = false;
                writer.WriteNode(reader, defattr);
                writer.Flush();
                outputStream.ResetHashWriteCalculator(new Crc32());
                while (LookNearNode() == Hl7Node.Message)
                {
                    var flag2 = false;
                    writer.WriteNode(reader, flag2);
                    messagesWritten += 1L;
                }

                if ((LookNearNode() != Hl7Node.Trailer) || !LoadBatchTrailer())
                {
                    DoClose();
                    throw new InvalidOperationException("Ошибка чтения завершающего узла Hl7");
                }

                DoCloseInput();
            }
        }