public void WriteObject(string file, object obj, BinaryXmlTypeMap typeMap) { using (Stream s = Create(file)) { BinaryXmlWriter writer = new BinaryXmlWriter(s, typeMap); writer.WriteValue("data", obj); } }
public object ReadSharedObject(string fullFileName, BinaryXmlTypeMap typeMap) { object result; OpenFileForPath(fullFileName, null, typeMap, false, out result); return(result); }
public object ReadObject(string file, BinaryXmlTypeMap typeMap) { using (Stream s = OpenRead(file)) { BinaryXmlReader reader = new BinaryXmlReader(s, typeMap); return(reader.ReadValue("data")); } }
static AddinDescription() { typeMap = new BinaryXmlTypeMap(); typeMap.RegisterType(typeof(AddinDescription), "AddinDescription"); typeMap.RegisterType(typeof(Extension), "Extension"); typeMap.RegisterType(typeof(ExtensionNodeDescription), "Node"); typeMap.RegisterType(typeof(ExtensionNodeSet), "NodeSet"); typeMap.RegisterType(typeof(ExtensionNodeType), "NodeType"); typeMap.RegisterType(typeof(ExtensionPoint), "ExtensionPoint"); typeMap.RegisterType(typeof(ModuleDescription), "ModuleDescription"); typeMap.RegisterType(typeof(ConditionTypeDescription), "ConditionType"); typeMap.RegisterType(typeof(Condition), "Condition"); typeMap.RegisterType(typeof(AddinDependency), "AddinDependency"); typeMap.RegisterType(typeof(AssemblyDependency), "AssemblyDependency"); typeMap.RegisterType(typeof(NodeTypeAttribute), "NodeTypeAttribute"); }
bool OpenFileForPath(string f, string objectId, BinaryXmlTypeMap typeMap, bool checkOnly, out object result) { result = null; if (!Exists(f)) { return(false); } using (Stream s = OpenRead(f)) { BinaryXmlReader reader = new BinaryXmlReader(s, typeMap); reader.ReadBeginElement(); string id = reader.ReadStringValue("id"); if (objectId == null || objectId == id) { if (!checkOnly) { result = reader.ReadValue("data"); } return(true); } } return(false); }
public string WriteSharedObject(string directory, string sharedFileName, string extension, string objectId, string readFileName, BinaryXmlTypeMap typeMap, IBinaryXmlElement obj) { string file = readFileName; if (file == null) { int count = 1; string name = sharedFileName + "_" + Util.GetStringHashCode(objectId).ToString("x"); file = Path.Combine(directory, name + extension); while (Exists(file)) { count++; file = Path.Combine(directory, name + "_" + count + extension); } } using (Stream s = Create(file)) { BinaryXmlWriter writer = new BinaryXmlWriter(s, typeMap); writer.WriteBeginElement("File"); writer.WriteValue("id", objectId); writer.WriteValue("data", obj); writer.WriteEndElement(); } return(file); }
public void WriteSharedObject(string objectId, string targetFile, BinaryXmlTypeMap typeMap, IBinaryXmlElement obj) { WriteSharedObject(null, null, null, objectId, targetFile, typeMap, obj); }
object ReadSharedObject(string directory, string sharedFileName, string extension, string objectId, BinaryXmlTypeMap typeMap, bool checkOnly, out string fileName) { string name = sharedFileName + "_" + Util.GetStringHashCode(objectId).ToString("x"); string file = Path.Combine(directory, name + extension); object result; if (OpenFileForPath(file, objectId, typeMap, checkOnly, out result)) { fileName = file; return(result); } // The file is not the one we expected. There has been a name colision foreach (string f in GetDirectoryFiles(directory, name + "*" + extension)) { if (f != file && OpenFileForPath(f, objectId, typeMap, checkOnly, out result)) { fileName = f; return(result); } } // File not found fileName = null; return(null); }
public object ReadSharedObject(string directory, string sharedFileName, string extension, string objectId, BinaryXmlTypeMap typeMap, out string fileName) { return(ReadSharedObject(directory, sharedFileName, extension, objectId, typeMap, false, out fileName)); }
object ReadSharedObject(string directory, string sharedFileName, string extension, string objectId, BinaryXmlTypeMap typeMap, bool checkOnly, out string fileName) { if (Util.IsWindows) { objectId = objectId.ToLowerInvariant(); } string name = GetFileKey(directory, sharedFileName, objectId); string file = Path.Combine(directory, name + extension); object result; OpenFileResult res = OpenFileForPath(file, objectId, typeMap, checkOnly, out result); if (res == OpenFileResult.Found) { fileName = file; return(result); } // The file is not the one we expected. There has been a name collision if (res == OpenFileResult.Collision) { int count = 1; file = Path.Combine(directory, name + "_" + count + extension); while (true) { res = OpenFileForPath(file, objectId, typeMap, checkOnly, out result); if (res == OpenFileResult.NotFound) { break; } if (res == OpenFileResult.Found) { fileName = file; return(result); } if (res == OpenFileResult.Collision) { count++; } } } // File not found fileName = null; return(null); }