11 const defaultCreator = "TTXT"
12 const defaultType = "TEXT"
14 var fileCreatorCodes = map[string]string{
19 var fileTypeCodes = map[string]string{
25 func fileTypeFromFilename(fn string) string {
26 ext := strings.Split(fn, ".")
27 code := fileTypeCodes[ext[len(ext)-1]]
36 func fileCreatorFromFilename(fn string) string {
37 ext := strings.Split(fn, ".")
38 code := fileCreatorCodes[ext[len(ext)-1]]
46 func getFileNameList(filePath string) ([]Field, error) {
49 files, err := ioutil.ReadDir(filePath)
54 for _, file := range files {
56 var fnwi FileNameWithInfo
57 fileCreator := make([]byte, 4)
58 //fileSize := make([]byte, 4)
60 fileType = []byte(fileTypeFromFilename(file.Name()))
61 fileCreator = []byte(fileCreatorFromFilename(file.Name()))
63 binary.BigEndian.PutUint32(fnwi.FileSize[:], uint32(file.Size()))
64 copy(fnwi.Type[:], fileType[:])
65 copy(fnwi.Creator[:], fileCreator[:])
67 fileType = []byte("fldr")
69 dir, err := ioutil.ReadDir(filePath + "/" + file.Name())
73 binary.BigEndian.PutUint32(fnwi.FileSize[:], uint32(len(dir)))
74 copy(fnwi.Type[:], fileType[:])
75 copy(fnwi.Creator[:], fileCreator[:])
78 nameSize := make([]byte, 2)
79 binary.BigEndian.PutUint16(nameSize, uint16(len(file.Name())))
80 copy(fnwi.NameSize[:], nameSize[:])
82 fnwi.name = []byte(file.Name())
84 b, err := fnwi.MarshalBinary()
88 fields = append(fields, NewField(fieldFileNameWithInfo, b))
94 func CalcTotalSize(filePath string) ([]byte, error) {
96 err := filepath.Walk(filePath, func(path string, info os.FileInfo, err error) error {
105 totalSize += uint32(info.Size())
113 bs := make([]byte, 4)
114 binary.BigEndian.PutUint32(bs, totalSize)
119 func CalcItemCount(filePath string) ([]byte, error) {
121 err := filepath.Walk(filePath, func(path string, info os.FileInfo, err error) error {
134 bs := make([]byte, 2)
135 binary.BigEndian.PutUint16(bs, itemcount-1)
140 func EncodeFilePath(filePath string) []byte {
141 pathSections := strings.Split(filePath, "/")
142 pathItemCount := make([]byte, 2)
143 binary.BigEndian.PutUint16(pathItemCount, uint16(len(pathSections)))
145 bytes := pathItemCount
147 for _, section := range pathSections {
148 bytes = append(bytes, []byte{0, 0}...)
150 pathStr := []byte(section)
151 bytes = append(bytes, byte(len(pathStr)))
152 bytes = append(bytes, pathStr...)
158 func ReadFilePath(filePathFieldData []byte) string {
160 err := fp.UnmarshalBinary(filePathFieldData)