internal SqlFileStream(string filename, SqlFileStreamMode mode, ManafestEntry entry) : this(filename, mode)
 {
     _entry = entry;
     if (mode == SqlFileStreamMode.Read)
     {
         var index = 0;
         _typeMappings = entry.Schema.ToDictionary(k => index++, v => v.LookupDataType());
         _objectBuffer = new object[entry.Schema.Count];
     }
 }
Beispiel #2
0
        public SqlArchive(string filename, SqlFileStreamMode mode, string tempFolder = null)
        {
            _filename  = filename;
            _mode      = mode;
            tempFolder = Path.Combine(tempFolder ?? Path.GetTempPath(), "SqlFileStream");

            //create the temp directory if not there
            var di = new DirectoryInfo(tempFolder);

            if (!di.Exists)
            {
                di.Create();
            }

            _folder = Path.Combine(tempFolder, Guid.NewGuid().ToString());

            var di2 = new DirectoryInfo(_folder);

            if (!di2.Exists)
            {
                di2.Create();
            }
        }
        // ReSharper disable once MemberCanBePrivate.Global
        public SqlFileStream(string filename, SqlFileStreamMode mode)
        {
            _mode           = mode;
            _jsonSerializer = new JsonSerializer();
            switch (mode)
            {
            case SqlFileStreamMode.Read:
                _fileStream        = File.Open(filename, FileMode.Open);
                _compressionStream = new GZipStream(_fileStream, CompressionMode.Decompress);
                _streamReader      = new StreamReader(_compressionStream);
                _jsonReader        = new JsonTextReader(_streamReader);
                break;

            case SqlFileStreamMode.Write:
                _fileStream        = File.Open(filename, FileMode.Create);
                _compressionStream = new GZipStream(_fileStream, CompressionMode.Compress);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(mode), mode, null);
            }
            IsClosed = false;
        }