Esempio n. 1
0
        /// <summary>
        /// Reads the header information from an sidecar file
        /// and reconstructs a header object.
        /// </summary>
        /// <param name="reader">A binary reader to the sidecar file.</param>
        /// <returns>The reconstructed header object.</returns>
        private static SidecarFileHeader ReadHeader(BinaryReader reader)
        {
            SidecarFileHeader header = new SidecarFileHeader
            {
                SourceFileLastWriteTime = DateTime.FromBinary(reader.ReadInt64()),
                SequenceCount           = reader.ReadInt32(),
                FileVersion             = reader.ReadInt32()
            };

            return(header);
        }
Esempio n. 2
0
        /// <summary>
        /// Writes the header to the sidecar file, and also writes information
        /// about the sidecar file itself.
        /// </summary>
        /// <param name="sequenceCount">The number of sequences in the source file.</param>
        /// <returns>true if the header was successfully created; otherwise, false</returns>
        private void WriteHeaderData(int sequenceCount)
        {
            _header = new SidecarFileHeader(_sourceFileName, sequenceCount);
            _streamWriter.Seek(0, SeekOrigin.Begin);

            // Write sidecar file size and last written date to the space left at top
            _offsetWriter.Write(_streamWriter.Length);
            _offsetWriter.Write(DateTime.Now.Date.ToFileTime());

            _offsetWriter.Write(_header.SourceFileLastWriteTime.ToBinary());
            _offsetWriter.Write(_header.SequenceCount);
            _offsetWriter.Write(_header.FileVersion);
        }
Esempio n. 3
0
        /// <summary>
        /// Opens an existing sidecar file and checks its validity.
        /// </summary>
        /// <param name="sidecarFileName">The path to the sidecar file.</param>
        private void OpenSidecar(string sidecarFileName)
        {
            // reset flag before proceeding
            if (IsSidecarValid)
            {
                IsSidecarValid = false;
            }

            try
            {
                _streamReader = new FileStream(sidecarFileName, FileMode.Open, FileAccess.Read);
                _offsetReader = new BinaryReader(_streamReader);

                _sidecarLength        = _offsetReader.ReadInt64();
                _sidecarLastWriteTime = _offsetReader.ReadInt64();

                FileInfo sidecarFileInfo = new FileInfo(sidecarFileName);

                // validate the sidecar file properties
                if ((_sidecarLastWriteTime == sidecarFileInfo.LastWriteTime.Date.ToFileTime()) && (_sidecarLength == sidecarFileInfo.Length))
                {
                    _header = ReadHeader(_offsetReader);

                    // validate the source file properties
                    if (_header.FileVersion == FileVersion && _header.SourceFileLastWriteTime == new FileInfo(_sourceFileName).LastWriteTime)
                    {
                        IsSidecarValid = true;

                        // sequence indexes start just after header
                        _contentsOffset = _streamReader.Position;
                    }
                    else
                    {
                        CloseInputStream();
                    }
                }
                else // close streams if sidecar is invalid
                {
                    CloseInputStream();
                }
            }
            catch (Exception)
            {
                CloseInputStream();
            }
        }