public PartitionedFileStreamFactory(string fileName) { _fileStream = new FileStream(fileName, FileMode.OpenOrCreate); if (_fileStream.Length == 0) { _header = new PartitionedFileHeader(0); _dataStart = _newStreamOffset = PartitionedFileHeader.DataOffset; _header.Write(_fileStream); } }
public PartitionedFileStream GetNewStream() { var bufferOverrun = (_newStreamOffset + sizeof (long)) - (_dataStart + _header.LengthOfCurrentBuffer); if (bufferOverrun > 0) { _header.OffsetOfNextHeader = _fileStream.Length; _fileStream.Seek(_currentHeaderOffset, SeekOrigin.Begin); _header.Write(_fileStream); _currentHeaderOffset = _header.OffsetOfHeader; _header = AddNewHeaderSection(); _header.OffsetOfPrevHeader = _currentHeaderOffset; _fileStream.Seek(_header.OffsetOfHeader, SeekOrigin.Begin); _header.Write(_fileStream); } _fileStream.Seek(_newStreamOffset, SeekOrigin.Begin); var newHeader = AddNewHeaderSection(); Serializer.Serialize(_fileStream, _fileStream.Length); _newStreamOffset += sizeof (long); return new PartitionedFileStream(_fileStream, newHeader, AddNewHeaderSection); }
public PartitionedFileHeader AddNewHeaderSection() { var header = new PartitionedFileHeader(_fileStream.Length) { LengthOfCurrentBuffer = _bufferSize }; _fileStream.Seek(0, SeekOrigin.End); header.Write(_fileStream); var buffer = new byte[_bufferSize]; _fileStream.Write(buffer, 0, buffer.Length); _fileStream.Seek(PartitionedFileHeader.DataOffset, SeekOrigin.Begin); return header; }
private PartitionedFileHeader AddNewHeaderSection() { const int bufferSize = 4096; var header = new PartitionedFileHeader(_fileStream.Length) {LengthOfCurrentBuffer = bufferSize}; _fileStream.Seek(0, SeekOrigin.End); header.Write(_fileStream); var buffer = new byte[bufferSize]; _fileStream.Write(buffer, 0, buffer.Length); return header; }