//Export document and metadata in portable format public Uri ExportDocument() { string path = Environment.GetFolderPath(Environment.SpecialFolder.Personal); string tempfolder = Path.Combine(path, "temp-export"); string docin = Path.Combine(path, ID); string docout = Path.Combine(tempfolder, "payload"); string metaout = Path.Combine(tempfolder, "metadata.lxm"); Directory.CreateDirectory(tempfolder); File.Copy(docin, docout); XmlSerializer docser = new XmlSerializer(typeof(Document)); TextWriter writer = new StreamWriter(metaout, false); docser.Serialize(writer, this); writer.Close(); string exportDir = Path.Combine(path, "export"); string output = Path.Combine(exportDir, Name.Replace(' ', '_') + ".lxe"); if (!Directory.Exists(exportDir)) { Directory.CreateDirectory(exportDir); } GZUtils.CompressDirectory(tempfolder, output); Directory.Delete(tempfolder, true); return(new Uri(output)); }
//Import public static Document ImportDocument(Stream LXE) { string path = Environment.GetFolderPath(Environment.SpecialFolder.Personal); string input = Path.Combine(path, "import.temp"); string tempfolder = Path.Combine(path, "temp-import"); string docin = Path.Combine(tempfolder, "payload"); string metain = Path.Combine(tempfolder, "metadata.lxm"); Directory.CreateDirectory(tempfolder); Stream tempfile = File.OpenWrite(input); LXE.CopyTo(tempfile); LXE.Close(); tempfile.Close(); GZUtils.DecompressToDirectory(input, tempfolder); File.Delete(input); XmlSerializer docser = new XmlSerializer(typeof(Document)); TextReader reader = new StreamReader(metain); Document newDoc = (Document)docser.Deserialize(reader); string importDir = Path.Combine(path, "import"); string docout = Path.Combine(importDir, newDoc.ID); if (!Directory.Exists(importDir)) { Directory.CreateDirectory(importDir); } if (File.Exists(docout)) { File.Delete(docout); } File.Move(docin, docout); Directory.Delete(tempfolder, true); return(newDoc); }