private void CreateDB(CreateMode create) { if (File.Exists(_dbPath) || File.Exists(_dbPkIdxPath)) { switch (create) { case CreateMode.Create: throw new Exception("Cannot create DB, DB already exists at " + _path); case CreateMode.OpenOrCreate: return; case CreateMode.Overwrite: File.Delete(_dbPath); File.Delete(_dbPkIdxPath); break; } } if (!Directory.Exists(_path)) { Directory.CreateDirectory(_path); } File.Create(_dbPath, 10000, FileOptions.Asynchronous | FileOptions.RandomAccess | FileOptions.WriteThrough).Close(); _dbfile = new FileStream(_dbPath, FileMode.Open, FileAccess.ReadWrite, FileShare.None, 10000, false); File.Create(_dbPkIdxPath, 10000, FileOptions.Asynchronous | FileOptions.RandomAccess | FileOptions.WriteThrough).Close(); _dbpkidxfile = new FileStream(_dbPkIdxPath, FileMode.Open, FileAccess.ReadWrite, FileShare.None, 10000, false); _identity = new PkIndex <K>(); Close(); }
private void InitDB() { _dbfile = new FileStream(_dbPath, FileMode.Open, FileAccess.ReadWrite, FileShare.None, 10000, false); _dbpkidxfile = new FileStream(_dbPkIdxPath, FileMode.Open, FileAccess.ReadWrite, FileShare.None, 10000, false); _identity = ProtoBuf.Serializer.DeserializeWithLengthPrefix <PkIndex <K> >(_dbpkidxfile, _prefix); foreach (long l in _identity) { if (l > _newPos) { _newPos = l; } if (_newPos != 0) { int objLen = 0; _dbfile.Position = _newPos; ProtoBuf.Serializer.TryReadLengthPrefix(_dbfile, _prefix, out objLen); _newPos += objLen; } } }