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

标签 go filenames

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

相关文章:

json - Golang JSON 路由配置

http - 将 CGI 脚本的输出保存在与脚本名称不同的文件名下

python - os.listdir() 使用什么方法获取目录中的文件列表?

go - 当您从一个 channel 读取并推送到另一个 channel 时,您如何编写一个不会挂起的函数

json - Golang 使用类型

python - 使用 glob 获取文件名

bash - 使用 for 循环在多个文件上运行 zcat

c# - 来自字符串(路径)的文件名,不存在文件

events - 在 Go 中监听事件的惯用方法是什么?

go - nohup 返回到 golang 中的程序