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); }
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(); } } }