public void Import(string path) { var inputFile = new FileInfo(_inputPath); var ifile = ModelUtility.GetIndexFile(path); var file = new FileInfo(path); if (Global.PrintFile != null) { Global.PrintFile.WriteLine(@"Importing ""{0}"" into ""{1}"" for type {2}.", inputFile.Name, file.Name, typeof(TModel).Name); Global.PrintFile.WriteLine(@"Creating file ""{0}"".", file.FullName); Global.PrintFile.WriteLine(@"Creating index file ""{0}"" for primary key.", ifile.FullName); } using (var reader = new StreamReader(inputFile.Open(FileMode.Open, FileAccess.Read, FileShare.Read))) { using (var iwriter = new BinaryWriter(ifile.Open(FileMode.Create, FileAccess.Write, FileShare.Read))) { using (var writer = new BinaryWriter(file.Open(FileMode.Create, FileAccess.Write, FileShare.Read))) { var i = 0; var position = 0L; reader.ReadLine(); string line; while ((line = reader.ReadLine()) != null) { var row = line.Split(new[] { _delimiter }); var model = new TModel(); SetModel(model, row); Write(iwriter, new Element(model.Id, position)); Write(writer, model); position += _size; if (i > 0 && i % 1024 == 0) { iwriter.Flush(); writer.Flush(); } i++; } } } } }
private TModel Seek(long location) { var offset = location - _position; if (offset != 0) { _stream.Seek(offset, SeekOrigin.Current); } _position = location + _size; _stream.Read(_buffer, 0, _size); _model = ModelUtility.PtrToStructure <TModel>(ref _buffer); return(_model); }
public Reader(string path) { var file = new FileInfo(path); _size = Marshal.SizeOf(typeof(TModel)); _buffer = new byte[_size]; _stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.Read); _count = (int)file.Length / _size; _index = new Dictionary <int, long>(_count); var ifile = ModelUtility.GetIndexFile(path); var isize = Marshal.SizeOf(typeof(Element)); var ibuffer = new byte[isize]; using (var istream = ifile.Open(FileMode.Open, FileAccess.Read, FileShare.Read)) { while (istream.Read(ibuffer, 0, isize) != 0) { var element = ModelUtility.PtrToStructure <Element>(ref ibuffer); _index.Add(element.Id, element.Position); } } }