Exemplo n.º 1
0
        async Task <bool> LoadIndexFile(string indexFile, string baseFile)
        {
            Func <string, bool> log = AddLogRecord;

            _header = Helper.ReadFromBinaryFile <SelfOrganizeIndexHeader>(indexFile, 0);
            if (_header.version == 0)
            {
                logLstBox.BeginInvoke(log, new object[] { "Ошибка чтения заголовка" });
                return(false);
            }

            logLstBox.BeginInvoke(log, new object[] { "Заголовок успешно прочитан" });

            logLstBox.BeginInvoke(log, new object[] { "Загрузка index файла займёт некоторое время, пожалуйста, подождите" });

            _linkedList = Helper.ReadFromBinaryFileLinkedList <SelfOrganizeIndexNode>(indexFile, _header.nodesBeginOffset, 0, true);

            return(true);
        }
Exemplo n.º 2
0
        void GenerateNewSelfOrganizingFile()
        {
            OpenFileDialog openDic = new OpenFileDialog();

            openDic.Multiselect = false;

            var items = new List <SelfOrganizeIndexNode>();

            if (openDic.ShowDialog() == DialogResult.OK)
            {
                var fileName = GenerateNameForNewFile();
                var lines    = System.IO.File.ReadAllLines(openDic.FileName);
                if (lines.Count() > 0)
                {
                    Console.WriteLine("Be patient!Operation may take some time,depending on input file");
                    var indexFile = fileName + ".index";
                    var baseFile  = fileName + ".base";

                    //Write 1st text element
                    var firstFileNode = new SelfOrganizeFileNode()
                    {
                        text = lines.ElementAt(0)
                    };
                    var firstFileNodePos = Helper.WriteToBinaryFile <SelfOrganizeFileNode>(baseFile, firstFileNode, FileMode.CreateNew);

                    var header = new SelfOrganizeIndexHeader()
                    {
                        version          = _version,
                        hashType         = _hashType,
                        count            = lines.Count(),
                        nodesBeginOffset = 0,
                    };

                    //Write header
                    var firstIndexPos = Helper.WriteToBinaryFile <SelfOrganizeIndexHeader>(indexFile, header, FileMode.CreateNew, -1, false);

                    //Update header with correct information
                    header.nodesBeginOffset = firstIndexPos;
                    Helper.WriteToBinaryFile <SelfOrganizeIndexHeader>(indexFile, header, FileMode.Open, 0);

                    var firstIndexNode = new SelfOrganizeIndexNode()
                    {
                        hash   = Helper.GetHash(firstFileNode.text, _hashType),
                        len    = Marshal.SizeOf(firstFileNode),
                        offset = firstFileNodePos
                    };

                    //Add 1st index
                    Helper.WriteToBinaryFile <SelfOrganizeIndexNode>(indexFile, firstIndexNode, FileMode.Append);

                    var res = new List <SelfOrganizeIndexNode>();

                    for (int i = 1; i < lines.Count(); i++)
                    {
                        var item = lines[i];

                        var fileNode = new SelfOrganizeFileNode()
                        {
                            text = item
                        };
                        var lastNodePos = Helper.WriteToBinaryFile <SelfOrganizeFileNode>(baseFile, fileNode, FileMode.Append);

                        var indexNode = new SelfOrganizeIndexNode()
                        {
                            hash   = Helper.GetHash(item, _hashType),
                            len    = System.Runtime.InteropServices.Marshal.SizeOf(fileNode),
                            offset = lastNodePos
                        };

                        res.Add(indexNode);
                    }
                    Helper.WriteToBinaryFileList <SelfOrganizeIndexNode>(indexFile, res, FileMode.Append);
                    res.Clear();
                }
            }
        }