func OpenFileHeaderFile(filename string) ([]*FileHeader, error) {
	file, err := os.Open(filename)
	if err != nil {
		log.Println(err)
		return nil, err
	}
	defer file.Close()
	ret := []*FileHeader{}
	for {
		hdr := make([]byte, 128)
		_, err := file.Read(hdr)
		if err == io.EOF {
			break
		}
		f, err := NewFileHeaderWithByte(hdr)
		if err != nil {
			return nil, err
		}
		ret = append(ret, f)
	}
	return ret, nil
}
OpenFileHeaderFile function open a .DIR file in board directory.
It returns slice of FileHeader.
package pttbbs
import (
	"bytes"
	"encoding/binary"
	"io"
	"log"
	"os"
	"time"
	"github.com/Ptt-official-app/go-bbs/filelock"
)
const (
	PosOfFileHeaderFilename  = 0
	PosOfFileHeaderModified  = PosOfFileHeaderFilename + FileNameLength
	PosOfFileHeaderRecommend = 1 + PosOfFileHeaderModified + 4
	PosOfFileHeaderOwner     = PosOfFileHeaderRecommend + 1
	PosOfFileHeaderDate      = PosOfFileHeaderOwner + IDLength + 2
	PosOfFileHeaderTitle     = PosOfFileHeaderDate + 6
	PosOfFileHeaderUnionMulti = 1 + PosOfFileHeaderTitle + TitleLength + 1
	PosOfFileHeaderFilemode   = PosOfFileHeaderUnionMulti + 4
)
type VoteLimits struct {
	Posts   uint8
	Logins  uint8
	Regtime uint8
	Badpost uint8
}
type FileHeader struct {
	filename  string
	modified  time.Time
	recommend int8    
	owner     string  
	date      string
	title     string
	money   int
	AnnoUID int
	VoteLimits
	ReferRef  uint  
	ReferFlag bool  
	Filemode uint8
}
func (f *FileHeader) Filename() string            { return f.filename }
func (f *FileHeader) SetFilename(newValue string) { f.filename = newValue }
func (f *FileHeader) Modified() time.Time               { return f.modified }
func (f *FileHeader) SetModified(newModified time.Time) { f.modified = newModified }
func (f *FileHeader) Recommend() int           { return int(f.recommend) }
func (f *FileHeader) AddRecommend(update int8) { f.recommend = f.recommend + update }
func (f *FileHeader) Owner() string            { return f.owner }
func (f *FileHeader) SetOwner(newValue string) { f.owner = newValue }
func (f *FileHeader) Date() string            { return f.date }
func (f *FileHeader) SetDate(newValue string) { f.date = newValue }
func (f *FileHeader) Title() string            { return f.title }
func (f *FileHeader) SetTitle(newValue string) { f.title = newValue }
func (f *FileHeader) Money() int { return f.money }
func NewFileHeader() *FileHeader {
	return &FileHeader{}
}