回答

收藏

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

技术问答 技术问答 314 人阅读 | 0 人回复 | 2023-09-12

我是 Go 新手,当我不知道目录的内容时,似乎找不到删除目录中所有内容的方法。! p: B/ y$ I5 u  {, |
我试过了:! l2 U" A2 N* b, X/ V3 `
    os.RemoveAll("/tmp/*")os.Remove("/tmp/*")4 K; a1 e6 i; j* o. z* h
但得到remove *: no such file or directory或invalid argument。/ }) q1 v7 p, g$ ]
当然,如果你这样做:3 I* p0 |7 g1 v# D- b# x5 b0 Y( _' R
    os.RemoveAll("/tmp/"); x7 z$ y" ]. y7 R# s. W' X' _
它tmp也会删除目录。这不是我想要的。
1 \+ b4 z8 `1 `0 l. G                                                                4 u4 k. p! W4 ^9 T
    解决方案:                                                               
3 m* W+ d7 m0 v0 f* s( }: ?                                                                写一个简单的RemoveContents函数。# m5 _, ~( l& \2 W) ^; P# ~
[code]package mainimport  "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    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)   }code]
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则