gpt4 book ai didi

go - 在go中制作文件名截断符

转载 作者:行者123 更新时间:2023-12-01 22:17:47 25 4
gpt4 key购买 nike

我是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"

关于go - 在go中制作文件名截断符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58243875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com