/// <summary>
        /// This method returns a readable data stream.
        /// </summary>
        /// <returns></returns>
        protected virtual Stream DataStreamRead()
        {
            Stream outStream;

            outStream = new FileStream(BinaryDataFileName, FileMode.Open, FileAccess.Read, FileShare.Read);

            if (Encrypted)
                outStream = new CryptoStream(outStream, RijndaelAlg.CreateDecryptor(), CryptoStreamMode.Read);

            if (Compressed)
                outStream = new GZipStream(outStream, CompressionMode.Decompress);

            outStream = new StreamCounter(outStream, StreamCounter.CounterDirection.Read, Length);

            return outStream;
        }
        /// <summary>
        /// This method returns a writeable data stream.
        /// </summary>
        /// <returns></returns>
        protected virtual Stream DataStreamWrite()
        {
            Stream outStream = null; ;
            RijndaelAlg = new RijndaelManaged();

            try
            {
                mFileStream = new FileStream(BinaryDataFileName, FileMode.CreateNew, FileAccess.Write, FileShare.None);
                outStream = mFileStream;

                if (Encrypted)
                {
                    mEncrStream = new CryptoStream(outStream, RijndaelAlg.CreateEncryptor(), CryptoStreamMode.Write);
                    outStream = mEncrStream;
                }

                if (Compressed)
                {
                    mCompStream = new GZipStream(outStream, CompressionMode.Compress);
                    outStream = mCompStream;
                }

                outStream = new StreamCounter(outStream);
            }
            catch (Exception ex)
            {
                //Just make sure that we don't leave anything open in case there is an error.
                if (outStream != null)
                    outStream.Close();

                mFileStream = null;
                mEncrStream = null;
                mCompStream = null;
            }

            return outStream;
        }