/// <summary>
        /// Rewrite info file<paramref name="infoFilePath"/> by data in <paramref name="file"/>.
        /// </summary>
        /// <param name="infoFilePath">Path relative from <see cref="FileManager.PathToHFOFolder"/></param>
        private void RewriteInfoFile(MyInfoFile file, string infoFilePath)
        {
            StreamWriter w = new StreamWriter(FileManager.PathToHFOFolder + infoFilePath);

            try{ file.RewriteFile(w); }
            finally { w.Dispose(); }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="templateFile"></param>
        /// <param name="file"></param>
        /// <param name="diskId">realative path to files ItemFiles folder</param>
        public static void readTemplate(string templateFile, MyInfoFile file, UInt64 diskId)
        {
            XmlTextReader reader = new XmlTextReader(Managers.FileManager.PathToHFOFolder + "\\FITemplates\\" + templateFile);

            try
            {
                InfoGroup actualGroup = null;
                while (reader.Read())
                {
                    switch (reader.NodeType)
                    {
                    case XmlNodeType.Element:
                        switch (reader.Name)
                        {
                        case "group":
                            if (actualGroup != null)
                            {
                                actualGroup = actualGroup.AddGroup(reader.GetAttribute("name"));
                            }
                            else
                            {
                                actualGroup = file.AddGroup(reader.GetAttribute("name"));
                            }
                            break;

                        case "value":
                            Item it = Parsing.ParseItem(reader.GetAttribute("type"), reader.GetAttribute("name"), reader, diskId);
                            it.SetValue(reader.GetAttribute("default"));
                            if (actualGroup != null)
                            {
                                actualGroup.AddItem(it);
                            }
                            else
                            {
                                file.AddItem(it);
                            }
                            break;
                        }
                        break;

                    case XmlNodeType.EndElement:
                        if (reader.Name == "group")
                        {
                            actualGroup = actualGroup.Up;
                        }
                        break;
                    }
                }
            }
            finally { reader.Dispose(); }
        }
        /// <summary>
        /// Read information about file to instance of MyFileInfo
        /// </summary>
        /// <param name="filePath">file with information about file (full path)</param>
        /// <param name="diskId">id of this where is this file</param>
        /// <returns>MyFileInfo with readet information, or null if file does not exists</returns>
        public static async Task <MyInfoFile> readFileInfo(string filePath, ulong diskId)
        {
            System.IO.FileInfo ff = new System.IO.FileInfo(filePath);
            Item inItem           = null;

            if (ff.Exists)
            {
                MyInfoFile file         = new MyInfoFile();
                var        hideenStream = new System.IO.StreamReader(filePath);
                XmlReader  reader       = XmlTextReader.Create(hideenStream, new XmlReaderSettings()
                {
                    Async = true
                });
                try
                {
                    InfoGroup actualGroup = null;
                    while (await reader.ReadAsync())
                    {
                        switch (reader.NodeType)
                        {
                        case XmlNodeType.Element:
                            switch (reader.Name)
                            {
                            case "group":
                                if (actualGroup != null)
                                {
                                    actualGroup = actualGroup.AddGroup(reader.GetAttribute("name"));
                                }
                                else
                                {
                                    actualGroup = file.AddGroup(reader.GetAttribute("name"));
                                }

                                break;

                            case "value":
                                inItem = Parsing.ParseItem(reader.GetAttribute("type"), reader.GetAttribute("name"), reader, diskId);
                                if (actualGroup != null)
                                {
                                    actualGroup.AddItem(inItem);
                                }
                                else
                                {
                                    file.AddItem(inItem);
                                }
                                break;
                            }
                            break;

                        case XmlNodeType.EndElement:
                            switch (reader.Name)
                            {
                            case "group":
                                actualGroup = actualGroup.Up;
                                break;

                            case "value":
                                inItem = null;
                                break;
                            }
                            break;

                        case XmlNodeType.Text:
                            if (inItem != null)
                            {
                                inItem.SetValue(reader.Value);
                            }
                            break;

                        case XmlNodeType.CDATA:
                            if (inItem != null)
                            {
                                inItem.SetValue(reader.Value);
                            }
                            break;
                        }
                    }
                }
                finally {
                    reader.Dispose();
                    hideenStream.Dispose();
                }
                return(file);
            }
            else
            {
                return(null);
            }
        }