Exemple #1
0
        public static Table OpenRead(string directory)
        {
            // get the filename of the manifest.
            var current = File.ReadAllLines(Path.Combine(directory, "CURRENT"));

            if (current.Length < 1)
            {
                throw new Exception("Invalid CURRENT file.");
            }

            // read the manifest file.
            var versionSet = new VersionSet();

            var block = new byte[32768];

            using (var file = File.OpenRead(Path.Combine(directory, current[0])))
            {
                var recordReader = new RecordReader();
                int numRead      = 0;
                do
                {
                    numRead = file.Read(block);
                    if (numRead > 0)
                    {
                        var sequence = new ReadOnlySequence <byte>(block);
                        var reader   = new SequenceReader <byte>(sequence);
                        while (reader.Remaining > 6)
                        {
                            if (!recordReader.From(ref reader, record => versionSet.Add(record)))
                            {
                                break;
                            }
                        }
                    }
                } while (numRead >= block.Length);
            }

            return(new Table(directory, versionSet));
        }