当前位置: 首页 > 面试题库 >

如何使用Golang删除目录的所有内容?

柳项明
2023-03-14
问题内容

我是Go的新手,似乎不知道删除目录中所有内容的方法

我试过了:

os.RemoveAll("/tmp/*")
os.Remove("/tmp/*")

但得到remove *: no such file or directoryinvalid argument

当然,如果您这样做:

os.RemoveAll("/tmp/")

tmp也会删除目录。这不是我想要的。


问题答案:

编写一个简单的RemoveContents函数。例如,

package main

import (
    "fmt"
    "os"
    "path/filepath"
    "strings"
)

func RemoveContents(dir string) error {
    d, err := os.Open(dir)
    if err != nil {
        return err
    }
    defer d.Close()
    names, err := d.Readdirnames(-1)
    if err != nil {
        return err
    }
    for _, name := range names {
        err = os.RemoveAll(filepath.Join(dir, name))
        if err != nil {
            return err
        }
    }
    return nil
}

func main() {
    dir := strings.TrimSuffix(filepath.Base(os.Args[0]), filepath.Ext(os.Args[0]))
    dir = filepath.Join(os.TempDir(), dir)
    dirs := filepath.Join(dir, `tmpdir`)
    err := os.MkdirAll(dirs, 0777)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
    file := filepath.Join(dir, `tmpfile`)
    f, err := os.Create(file)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
    f.Close()
    file = filepath.Join(dirs, `tmpfile`)
    f, err = os.Create(file)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
    f.Close()

    err = RemoveContents(dir)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
}


 类似资料:
  • 问题内容: 我想删除目录中带有扩展名的所有文件。如何在Python中做到这一点? 问题答案: 通过和: 仅使用一个循环: 或通过: 确保位于正确的目录中,并最终使用。

  • 问题内容: 我在应用程序中拥有的导出工具的任务之一是清除应用程序目录树中的所有目录。我正在Linux外壳中寻找一个递归命令,该命令将遍历整个树并删除文件。 我没有使用export,因为此脚本将用于与SVN不相关的其他文件/目录名称。我尝试了类似的东西: 没用… 问题答案: 尝试这个: 在运行这样的命令之前,我经常喜欢先运行以下命令:

  • 我的应用程序将txt文件存储在FTP服务器上,该服务器也托管在WebService上。 但是,即使该目录中有txt文件,FTP重置是:

  • 问题内容: 我要删除所有密钥。我希望一切都消灭,然后给我一个空白的数据库。 有没有办法在Redis客户端中做到这一点? 问题答案: 使用redis-cli: FLUSHDB –从连接的当前数据库中删除所有密钥。 FLUSHALL –从所有数据库中删除所有键。 例如,在您的shell中:

  • 对于我目前正在使用Scala和Spark进行的一个项目,我必须编写一个代码来检查我正在处理的hdfs目录是否为空,如果不是,我必须从该目录中删除所有文件。 在我将代码部署到Azur之前,我正在使用计算机中的本地目录对其进行测试。 我从以下内容开始:创建一个方法来删除这个目录中的每个文件。这就是我现在所拥有的: 有了这段代码,我可以删除单个文件()。我希望能够这样定义我的路径(不指定任何文件名),只

  • 我总是使用VSCode,不久前我卸载了anaconda。问题是,当我在VSCode中使用Jupyter笔记本电脑时,如果我不记得对其进行了更改,那么它默认使用的内核是“opt/anaconda3/bin/python”,这已经不存在了。所以,每次打开VSCode时,我都必须更改内核。 我想删除所有其他内核,所以VSCode没有选择使用蟒蛇的内核,我在任何地方都找不到答案,有人可以帮我吗? 谢谢 在