以编程方式查找下载文件夹(Go)

问题描述 投票:0回答:1

我正在尝试找到一种与平台无关的方法来确定用户的下载文件夹。我正在使用 golang 的 fyne。到目前为止,我已经找到了一些有用的功能,但似乎无法将它们结合在一起。更重要的是,我不确定不同平台会出现什么问题。

  • os.Getwd()
    获取工作目录的名称
  • filepath.Dir()
    后退一步并获取文件路径
  • strings.Contains("filepath","downloads")
    会告诉我文件路径中是否有“下载”

天真地,我可能会做这样的事情:

path,_ := os.Getwd()

//count how far back 
steps_back := -1
for strings.Contains(path,"downloads") { // runs as long as path has "downloads" in it

path = filepath.Dir(path) 
steps_back++
}

downloads_path,_ := os.Getwd()

for step=0;step<steps_back;step++ {
downloads_path = filepath.Dir(downloads_path)
}

但是:

  1. 仅当用户从下载文件夹的某个扩展名运行应用程序时才有效
  2. 我不知道是否存在特定于平台的障碍

有什么想法吗?

go path cross-platform fyne platform-agnostic
1个回答
0
投票

我会尝试使用 os.UserHomeDir() 函数并在其下查找下载。它可能不适用于所有情况,用户可能能够在某种程度上自定义他们的默认下载目录,但它可能足以满足您需要做的事情。

package main

import (
    "fmt"
    "log"
    "os"
)

var (
    DownloadDirNames []string = []string{"Downloads", "downloads", "download", "Downloads", "etc..."}
)

func main() {
    var downloadDir string

    homeDir, err := os.UserHomeDir()
    if err != nil {
        log.Fatal(err)
    }

    for _, ddn := range DownloadDirNames {
        var dir = filepath.Join(homeDir, ddn)

        if _, err := os.Stat(dir); os.IsNotExist(err) {
            fmt.Println(dir, "does not exist")
        } else {
            fmt.Println("The provided directory named", dir, "exists")
        }
    }
    fmt.Println("Download Directory:", downloadDir)
}
© www.soinside.com 2019 - 2024. All rights reserved.