我是Go的新手,当我不知道内容时,似乎无法找到删除目录中所有内容的方法。
我试过了:
os.RemoveAll("/tmp/*")
os.Remove("/tmp/*")
但请remove *: no such file or directory
或invalid argument
。
当然,如果你这样做:
os.RemoveAll("/tmp/")
它也会删除tmp
目录。这不是我想要的。
答案 0 :(得分:57)
这可能是一个愚蠢的答案,但为什么不简单呢?
Table1 <-
transform(
Table1, Output =
ifelse(
Direction == "ENE",
approx(
Table2$Wind.speed, Table2$Output, xout = Table1$WindSpeed, method = "constant")$y, "Næsta átt")
)
> Table1
WindSpeed Degrees Direction Output
1 7.68 58.9 ENE 66.301
2 5.09 63.2 ENE 13.747
3 7.56 72.2 ENE 66.301
4 8.39 73.8 ENE 66.301
5 7.34 73.1 ENE 42.939
6 7.83 74.9 ENE 66.301
7 8.42 73.8 ENE 66.301
8 7.70 85.5 E Næsta átt
9 2.58 75.6 E Næsta átt
答案 1 :(得分:22)
编写一个简单的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)
}
}
答案 2 :(得分:2)
只需使用ioutil.ReadDir
即可获得os.FileInfo
类型的切片,然后然后使用os.RemoveAll
进行迭代并删除每个子项。
package main
import (
"io/ioutil"
"os"
"path"
)
func main() {
dir, err := ioutil.ReadDir("/tmp")
for _, d := range dir {
os.RemoveAll(path.Join([]string{"tmp", d.Name()}...))
}
}
这样,您将仅删除所有子项,而不删除父/tmp
文件夹本身。
我以前多次使用这种模式(例如测试日志等)。
答案 3 :(得分:1)
您可以使用 filepath.Glob()
获取文件夹内容的一部分,然后删除它返回的所有内容。这允许您使用 /tmp/*
来指示要删除的内容,也可以用于删除 /tmp/*.go
或 /tmp/*/*.go
等。
package main
import (
"log"
"os"
"path/filepath"
)
func RemoveGlob(path string) (err error) {
contents, err := filepath.Glob(path)
if err != nil {
return
}
for _, item := range contents {
err = os.RemoveAll(item)
if err != nil {
return
}
}
return
}
func main() {
err := RemoveGlob("/tmp/*")
if err != nil {
log.Fatalf("Error removing files: %+v", err)
}
}
答案 4 :(得分:0)
func RemoveContents(dir string) error {
files, err := filepath.Glob(filepath.Join(dir, "*"))
if err != nil {
return err
}
for _, file := range files {
err = os.RemoveAll(file)
if err != nil {
return err
}
}
return nil
}