我是Go的新手,我一直在尝试制作一个程序来截断目录中所有文件的字符“-”之后(包括)后的文件名。它不起作用,我也不知道我要去哪里。
func changeFilename() {
file, err := os.Open(".")
if err != nil {
log.Fatalf("failed opening directory: %s", err)
}
defer file.Close()
oldNames, _ := file.Readdirnames(0)
var s string
for _, i := range oldNames {
for _, j := range i {
for j != '-' {
k := strconv.QuoteRune(j)
s += k
j++
}
}
err := os.Rename(i, s)
if err != nil {
log.Fatal("failed to rename: %s", err)
}
}
}
我希望在运行可执行文件时更改测试目录中的文件名,但没有更改。该程序的生成没有任何错误消息。
最佳答案
修改逻辑以与问题描述相对应:
package main
import (
"fmt"
"log"
"os"
"path/filepath"
)
// changeFilename truncates filenames after (and including) the character "-"
// of all files in the directory. File extensions are preserved.
func changeFilename(dir string) {
file, err := os.Open(dir)
if err != nil {
log.Fatalf("failed opening directory: %s", err)
}
defer file.Close()
fis, err := file.Readdir(0)
if err != nil {
log.Fatalf("failed reading directory: %s", err)
}
for _, fi := range fis {
if !fi.Mode().IsRegular() {
continue
}
old := fi.Name()
ext := filepath.Ext(old)
for i, r := range old[:len(old)-len(ext)] {
if r == '-' {
new := old[:i] + ext
err := os.Rename(old, new)
if err != nil {
log.Fatalf("failed to rename: %s", err)
}
fmt.Printf("%q %q\n", old, new)
break
}
}
}
}
func main() {
changeFilename(".")
}
输出:
"trunc-ate.typ" "trunc.typ"
"hyp-hen.ext" "hyp.ext"