public bool ReadReplay(ReadMode mode)
        {
            ReplayStream = File.Open(FileName, FileMode.Open, FileAccess.Read, FileShare.Read);
            // byte flag = (byte)ReplayStream.ReadByte();
            Reader = new ReplayReader(ReplayStream);
            try
            {
                // Read File
                if (mode == ReadMode.HeaderOnly)
                {
                    Header = Reader.ReadHeader();
                    ReplayStream.Flush();
                    Reader.Close();
                }
                else if (mode == ReadMode.All)
                {
                    // Header
                    Header = Reader.ReadHeader();

                    // Sections
                    List <ReplaySection> secs = new List <ReplaySection>();
                    while (!Reader.EOF())
                    {
                        ReplaySection se = Reader.ReadSection();
                        secs.Add(se);
                    }



                    //  ReplayStream.Flush();
                    Reader.Close();
                    ParseSections(secs);
                }
                else if (mode == ReadMode.AllExceptData)
                {
                    // Header
                    Header = Reader.ReadHeader();

                    // Sections
                    List <ReplaySection> secs = new List <ReplaySection>();
                    while (!Reader.EOF())
                    {
                        ReplaySection se = Reader.ReadSection();
                        if (se.Type != SectionType.Keys && se.Type != SectionType.Chunks)
                        {
                            secs.Add(se);
                        }
                    }



                    //  ReplayStream.Flush();
                    Reader.Close();
                    ParseSections(secs);
                }
                else if (mode == ReadMode.DataOnly)
                {
                    // Header
                    Header = Reader.ReadHeader();

                    // Sections
                    List <ReplaySection> secs = new List <ReplaySection>();
                    while (!Reader.EOF())
                    {
                        ReplaySection se = Reader.ReadSection();
                        if (se.Type == SectionType.Keys || se.Type == SectionType.Chunks)
                        {
                            secs.Add(se);
                        }
                    }



                    //  ReplayStream.Flush();
                    Reader.Close();
                    ParseSections(secs);
                }

                return(true);
            }
            catch
            {
            }
            finally
            {
            }
            return(false);
        }