【问题标题】:Get current file name after creating executable创建可执行文件后获取当前文件名
【发布时间】:2020-02-14 08:06:26
【问题描述】:

我可以获取当前目录和当前.go 文件的名称,但是如果我从带有go build 的文件构建.exe,那么我仍然会得到.go 名称。

.../Project/Test/testfile.go

在使用go build 构建testfile.go 之后,我有这些:

1) .../Project/Test/testfile.go

2) .../Project/Test/main.exe

当我执行 main.exe 时,我得到 testfile 但我想在执行 main.exe 后得到 main 名称

package main

import (
    "errors"
    "fmt"
    "path/filepath"
    "runtime"
    "strings"
)

func GetFileName() string {
    _, fpath, _, ok := runtime.Caller(0)
    if !ok {
        err := errors.New("failed to get filename")
        panic(err)
    }
    filename := filepath.Base(fpath)
    filename = strings.Replace(filename, ".go", "", 1)
    return filename
}

func main() {
    fmt.Print(GetFileName())
}

【问题讨论】:

  • 可以使用os.Args[0]获取可执行文件名
  • @CanobbioE 抱歉不知道这么简单。你可以写一个答案,所以我把它标记为已解决
  • 另见os.Executable。 Args 可能不是您想要的,但由于您没有告诉我们您真正想要什么,我们不能推荐其中一个。
  • @Peter 我想在任何情况下都获得“可执行”名称。有或没有参数或任何路径。我也认为 args[0] 总是包含 c# 中的可执行文件名称。你有什么更好的推荐吗?

标签: go path filenames getmodulefilename


【解决方案1】:

os package 提供os.Args[0] 来获取可执行文件名称,或者如果您想要整个路径,您可以使用os.Executable,正如@Peter 所建议的那样

【讨论】:

  • Args not 包含可执行文件的名称。这只是第一个参数,即“我在 shell 上输入的任何内容”(*挥手*)。例如,它可以是指向可执行文件的符号链接的名称。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-16
  • 1970-01-01
  • 2015-06-01
  • 2011-01-12
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多