Untitled

 avatar
user_2224127
golang
7 months ago
2.5 kB
4
Indexable
package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"os"
	"path/filepath"
	"sort"
	"strings"
)

// 获取目录下所有 .SEG 文件并按顺序重命名,同时修改文件内容的前三个字节
func renameAndModifyFiles(dir string) error {
	// 读取目录中的所有文件
	files, err := ioutil.ReadDir(dir)
	if err != nil {
		return fmt.Errorf("failed to read directory: %w", err)
	}

	// 用来存储所有的 .SEG 文件
	var SEGFiles []string

	// 遍历文件列表,找到所有的 .SEG 文件
	for _, file := range files {
		if !file.IsDir() && strings.HasSuffix(file.Name(), ".SEG") {
			SEGFiles = append(SEGFiles, file.Name())
		}
	}

	// 如果没有找到 .SEG 文件,返回
	if len(SEGFiles) == 0 {
		return fmt.Errorf("no .SEG files found in directory")
	}

	// 按文件名排序(如果需要按字母顺序排序,可以使用 sort.Strings 或其他排序方法)
	sort.Strings(SEGFiles)

	// 批量重命名文件并修改文件内容
	for i, oldName := range SEGFiles {
		// 生成新的文件名,格式为 001.SEG, 002.SEG 等
		newName := fmt.Sprintf("%03d.SEG", i+1)

		// 生成完整的文件路径
		oldPath := filepath.Join(dir, oldName)
		newPath := filepath.Join(dir, newName)

		// 打开文件并修改前三个字节
		err := modifyFileContent(oldPath, newPath, newName[:3])
		if err != nil {
			log.Printf("Error modifying file %s: %v", oldName, err)
			continue
		}

		// 重命名文件
		err = os.Rename(oldPath, newPath)
		if err != nil {
			log.Printf("Error renaming file %s to %s: %v", oldName, newName, err)
			continue
		}

		fmt.Printf("Renamed and modified file: %s to %s\n", oldName, newName)
	}

	return nil
}

// 修改文件内容,将文件的前三个字节写为新的文件名中的三位数字
func modifyFileContent(oldPath, newPath, newFileName string) error {
	// 打开文件
	data, err := ioutil.ReadFile(oldPath)
	if err != nil {
		return fmt.Errorf("failed to read file %s: %w", oldPath, err)
	}

	// 修改文件的前三个字节
	copy(data[:3], newFileName)

	// 将修改后的数据写入新文件
	err = ioutil.WriteFile(newPath, data, 0644)
	if err != nil {
		return fmt.Errorf("failed to write to file %s: %w", newPath, err)
	}

	return nil
}

func main() {
	// 指定文件夹路径
	dir := "./SEG_files" // 这里可以指定你要操作的目录

	// 调用重命名并修改文件内容的函数
	err := renameAndModifyFiles(dir)
	if err != nil {
		log.Fatalf("Error: %v", err)
	}
}
Editor is loading...
Leave a Comment