Go中filepath.Abs(fileInfo.Name())无法返回文件子目录路径的问题
原因分析与解决办法
核心原因
fileInfo.Name()的返回值只是文件名本身(即test.csv),不包含任何路径信息。这是Go标准库中os.FileInfo接口的Name()方法的定义——它只返回文件的基名,和你打开文件时传入的完整路径无关。
当你调用filepath.Abs(fileInfo.Name())时,函数会将当前工作目录(也就是你运行代码的myproject目录)和这个文件名拼接,所以最终得到的是C:\myproject\test.csv。同理,filepath.Dir("test.csv")自然会返回当前目录的简写.。
解决办法
有两种简单可靠的方式可以获取正确的完整路径:
直接复用打开文件时的原始路径
既然你已经有了完整路径fullPath,直接对它调用filepath.Abs()即可确保得到标准绝对路径:filePath, err := filepath.Abs(fullPath) if err != nil { log.Fatal(err) } fmt.Println(filePath)通过文件句柄获取路径
如果你不想依赖原始的fullPath变量,可以直接使用文件对象的Name()方法(os.File.Name()返回的是打开文件时使用的路径,在多数系统和场景下都是可靠的),再配合filepath.Abs()处理:filePath, err := filepath.Abs(f.Name()) if err != nil { log.Fatal(err) } fmt.Println(filePath)
内容的提问来源于stack exchange,提问作者Coldchain9
相关产品推荐
相关产品推荐

