コード例 #1
0
 public void WriteObject(string file, object obj, BinaryXmlTypeMap typeMap)
 {
     using (Stream s = Create(file)) {
         BinaryXmlWriter writer = new BinaryXmlWriter(s, typeMap);
         writer.WriteValue("data", obj);
     }
 }
コード例 #2
0
        public object ReadSharedObject(string fullFileName, BinaryXmlTypeMap typeMap)
        {
            object result;

            OpenFileForPath(fullFileName, null, typeMap, false, out result);
            return(result);
        }
コード例 #3
0
 public object ReadObject(string file, BinaryXmlTypeMap typeMap)
 {
     using (Stream s = OpenRead(file)) {
         BinaryXmlReader reader = new BinaryXmlReader(s, typeMap);
         return(reader.ReadValue("data"));
     }
 }
コード例 #4
0
 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");
 }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
 public void WriteSharedObject(string objectId, string targetFile, BinaryXmlTypeMap typeMap, IBinaryXmlElement obj)
 {
     WriteSharedObject(null, null, null, objectId, targetFile, typeMap, obj);
 }
コード例 #8
0
        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);
        }
コード例 #9
0
 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));
 }
コード例 #10
0
ファイル: FileDatabase.cs プロジェクト: mjakeman/Hyena.Addins
        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);
        }