windows 如何在Go语言中以操作系统无关的方式获取文件系统的根目录

xbp102n0  于 2022-11-26  发布在  Windows
关注(0)|答案(1)|浏览(204)

我想在Go语言中得到文件系统的根目录,这样它就可以在Windows和Unix上工作。
我想我可以做一些

func fsRootDir() string {
    s := os.Getenv("SystemDrive")
    if s != "" {
        return s
    }
    return "/"
}

然而,这有几个问题,所以我拒绝了这种方法:

  • 用户可以在Unix上使用一些虚假路径创建SystemDrive环境变量。
  • 用户可以将Windows上SystemDrive环境变量的值更改为某个虚假路径。

我查看了this answer to a related question,但这也有一些问题:

  • 第一个选项依赖于SystemDrive环境变量,由于上述原因,该环境变量在Unix或Windows上不能保证保存预期值。
  • 此答案中的所有其他选项都依赖于os.TempDir。在Windows上,os.TempDir使用GetTempPath,返回%TMP%%TEMP%%USERPROFILE%或Windows目录中的第一个非空值。我不相信这些环境变量没有被修改。

我也考虑过

func fsRootDir() string {
    if runtime.GOOS == "windows" {
        return "C:"
    }
    return "/"
}

但我想我在什么地方读到过,可以将Windows上的文件系统根目录更改为C:以外的其他内容。
我怎样才能获得一个文件系统的根目录,使它在Windows和Unix上都能工作?

eit6fx6z

eit6fx6z1#

为什么不把两者结合起来呢?

func fsRootDir() string {
    if runtime.GOOS == "windows" {
        return os.Getenv("SystemDrive")
    }
    return "/"
}

用户可以将Windows上SystemDrive环境变量的值更改为某个虚假路径。
不,他们不能,SystemDrive是只读变量。

相关问题