/// <summary> /// 输出多個 XML files,每個 XML file 最多只包含 2 萬笔资料 /// </summary> /// <param name="xmlFilePath">要输出的 XML file 路径</param> /// <returns>成功输出的 XML file path list</returns> private List <string> ExportMultiple4BytesAlignXmls( string xmlOutputFolderPath, AddrList.DevDataTable Devices) { const int SEGMENT_SIZE = 20000; List <string> files = new List <string>(); if (Devices.Count() > 0) { int fileCount = (Devices.Count() - 1) / SEGMENT_SIZE + 1; int devIndex = 0; for (int i = 0; i < fileCount; ++i) { string xmlFilePath = (i == 0) ? (xmlOutputFolderPath + @"\addressbook.xml") : (xmlOutputFolderPath + @"\addressbook" + i + ".xml"); AddrList ds = new AddrList(); int devCount = Math.Min(SEGMENT_SIZE, Devices.Count() - i * SEGMENT_SIZE); for (int j = 0; j < devCount; ++j) { ds.dev.ImportRow(Devices[devIndex++]); } if (ExportXml(xmlFilePath, ds.dev) && Export4BytesAlignXml(xmlFilePath, xmlFilePath)) { files.Add(xmlFilePath); } } } return(files); }
private void ExportAddressBookUclPkg(string pkgFilePath, AddrList.DevDataTable Devices) { List <string> xmlFilesPath = ExportMultiple4BytesAlignXmls( Path.GetAddressBookTempFolderPath(), Devices); List <string> uclFilesPath = new List <string>(); string uclTempFolderPath = Path.GetAddressBookUclTempFolderPath(); int count = xmlFilesPath.Count; for (int i = 0; i < count; ++i) { string xmlFilePath = xmlFilesPath[i]; string uclFilePath = (i == 0) ? (uclTempFolderPath + @"\addressbook.ucl") : (uclTempFolderPath + @"\addressbook" + i + ".ucl"); try { if (false == FileConverter.Xml2Ucl(xmlFilePath, uclFilePath)) { throw new Exception("UCL无法導出"); } uclFilesPath.Add(uclFilePath); } catch (Exception ex) { MessageBox.Show(ex.Message, "操作错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } if (uclFilesPath.Count > 0) { PkgTool.ToPkgFile(uclTempFolderPath, pkgFilePath); } foreach (string filePath in xmlFilesPath) { File.Delete(filePath); } foreach (string filePath in uclFilesPath) { File.Delete(filePath); } }
private void ExportAddressBookXmlPkg(string pkgFilePath, AddrList.DevDataTable Devices) { string xmlFilePath = Path.GetAddressBookTempXmlFilePath(); if (ExportXml(xmlFilePath, Devices)) { try { PkgTool.ToPkgFile(System.IO.Path.GetDirectoryName(xmlFilePath), pkgFilePath); } catch (Exception ex) { throw ex; } finally { File.Delete(xmlFilePath); } } }
private bool ExportXml(string xmlFilePath, AddrList.DevDataTable Devices) { bool result = false; XmlWriterSettings settings = new XmlWriterSettings { Indent = true }; using (MemoryStream stream = new MemoryStream()) { using (XmlWriter writer = XmlWriter.Create(stream, settings)) { try { Devices.WriteXml(writer); // Reset stream to origin stream.Seek(0, SeekOrigin.Begin); // Load stream as XDocument XDocument xdoc = XDocument.Load(stream); // TODO 版本号应该要可以修改 xdoc.Element("AddrList").SetAttributeValue("ver", "1.0"); // Save to file as XML xdoc.Save(xmlFilePath); result = true; } catch (Exception) { //MessageBox.Show(ex.Message, "操作错误", // MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { writer.Close(); } } } return(result); }