protected virtual DataSet LoadFromFile() { if (m_FileName == null) { throw new ApplicationException("FileName is null"); } System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument(); xmlDoc.Load(m_FileName); System.Xml.XmlNamespaceManager namespaceMan = new System.Xml.XmlNamespaceManager(xmlDoc.NameTable); namespaceMan.AddNamespace("fileds", c_DataNamespace); System.Xml.XmlNode tmp = xmlDoc.DocumentElement.SelectSingleNode("fileds:header", namespaceMan); if (tmp == null) { throw new ApplicationException("File header not found"); } System.Xml.XmlElement header = (System.Xml.XmlElement)tmp; //File Version string strFileVersion = header.GetAttribute(c_FileVersion); int fileVersion = int.Parse(strFileVersion); if (fileVersion == c_FileVersionNumber) { string strDataFormat = header.GetAttribute(c_DataFormat); mFileDataFormat = (StreamDataSetFormat)int.Parse(strDataFormat); } else if (fileVersion == 0) { mFileDataFormat = StreamDataSetFormat.XML; } else if (fileVersion > c_FileVersionNumber) { throw new ApplicationException("File Version not supported, expected: " + c_FileVersionNumber.ToString()); } //Data Version string strDataVersion = header.GetAttribute(c_DataVersion); int dataVersion = int.Parse(strDataVersion); DataSet dataSet = CreateData(dataVersion); //Data tmp = xmlDoc.DocumentElement.SelectSingleNode("fileds:data", namespaceMan); if (tmp == null) { throw new ApplicationException("File data not found"); } System.Xml.XmlElement xmlDataNode = (System.Xml.XmlElement)tmp; byte[] xmlBuffer = System.Convert.FromBase64String(xmlDataNode.InnerText); using (System.IO.MemoryStream memStream = new System.IO.MemoryStream(xmlBuffer)) { StreamDataSet.Read(memStream, dataSet, mFileDataFormat, MergeReadedSchema); //dataSet.ReadXml(memStream); } return(dataSet); }
protected virtual void SaveToFile(DataSet pDataSet) { if (m_FileName == null) { throw new ApplicationException("FileName is null"); } byte[] completeByteArray; using (System.IO.MemoryStream fileMemStream = new System.IO.MemoryStream()) { System.Xml.XmlTextWriter xmlWriter = new System.Xml.XmlTextWriter(fileMemStream, System.Text.Encoding.UTF8); xmlWriter.WriteStartDocument(); xmlWriter.WriteStartElement("filedataset", c_DataNamespace); xmlWriter.WriteStartElement("header", c_DataNamespace); //File Version xmlWriter.WriteAttributeString(c_FileVersion, c_FileVersionNumber.ToString()); //Data Version xmlWriter.WriteAttributeString(c_DataVersion, GetDataVersion().ToString()); //Data Format xmlWriter.WriteAttributeString(c_DataFormat, ((int)mSaveDataFormat).ToString()); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("data", c_DataNamespace); byte[] xmlByteArray; using (System.IO.MemoryStream xmlMemStream = new System.IO.MemoryStream()) { StreamDataSet.Write(xmlMemStream, pDataSet, mSaveDataFormat); //pDataSet.WriteXml(xmlMemStream); xmlByteArray = xmlMemStream.ToArray(); xmlMemStream.Close(); } xmlWriter.WriteBase64(xmlByteArray, 0, xmlByteArray.Length); xmlWriter.WriteEndElement(); xmlWriter.WriteEndElement(); xmlWriter.WriteEndDocument(); xmlWriter.Flush(); completeByteArray = fileMemStream.ToArray(); fileMemStream.Close(); } //se tutto ?andato a buon fine scrivo effettivamente il file using (System.IO.FileStream fileStream = new System.IO.FileStream(m_FileName, System.IO.FileMode.Create, System.IO.FileAccess.Write)) { fileStream.Write(completeByteArray, 0, completeByteArray.Length); fileStream.Close(); } }