//Returns a list of folders containing fileNames and their file info
        public BarFile(string filePath)
        {
            FilePath = filePath;

            Stream       stream = new FileStream(filePath, FileMode.Open);
            BinaryReader reader = new BinaryReader(stream);

            reader.ReadBytes(280);                                              //Magic word,version,empy....
            int fileCountTotal  = BitConverter.ToInt32(reader.ReadBytes(4), 0); //number of files
            int directoryOffset = BitConverter.ToInt32(reader.ReadBytes(4), 0); //offset to main directory

            stream.Position = directoryOffset;                                  //go to director offset

            //Fetch directory name
            int mainDirectoryNameLenght = BitConverter.ToInt32(reader.ReadBytes(4), 0);//lenght if the directory name

            DirectoryName = "";
            for (int i = 0; i < mainDirectoryNameLenght * 2; i++)
            {
                Char c = (Char)reader.ReadByte();
                if (c != '\0')
                {
                    DirectoryName += c;
                }
            }
            //Add folder to list
            Files = new List <AoEFile>();

            //Add files to folder
            int fileCountDirectory = BitConverter.ToInt32(reader.ReadBytes(4), 0);//fileCount directory

            for (int i = 0; i < fileCountDirectory; i++)
            {
                AoEFile file = new AoEFile();
                file.fileOffset = BitConverter.ToInt32(reader.ReadBytes(4), 0);
                file.fileSize   = BitConverter.ToInt32(reader.ReadBytes(4), 0);
                reader.ReadBytes(20);//skip
                file.fileName = "";
                int fileNameLenght = BitConverter.ToInt32(reader.ReadBytes(4), 0);
                for (int chr = 0; chr < fileNameLenght * 2; chr++)
                {
                    Char c = (Char)reader.ReadByte();
                    if (c != '\0')
                    {
                        file.fileName += c;
                    }
                }
                //Add file to foler's fileList
                Files.Add(file);
            }
            stream.Close();
        }
        //Get the file from Bar file and save it to savePath
        public byte[] ReadFile(AoEFile file)
        {
            //Setup stream
            Stream       readStream = new FileStream(FilePath, FileMode.Open);
            BinaryReader reader     = new BinaryReader(readStream);

            //Get file data
            readStream.Position = file.fileOffset;
            byte[] fileBytes = reader.ReadBytes(file.fileSize);
            readStream.Close();

            return(fileBytes);
        }