gobyexample icon indicating copy to clipboard operation
gobyexample copied to clipboard

关于"临时文件和目录"无法删除tempfile

Open zmc-x opened this issue 1 year ago • 1 comments

问题描述: 执行"临时文件和目录"代码时,会存在这样的error:The process cannot access the file because it is being used by another process. 首先代码如网站描述:

func check(e error) {
    if e != nil {
        panic(e)
    }
}

func main() {

    f, err := os.CreateTemp("", "sample")
    check(err)

    fmt.Println("Temp file name:", f.Name())

    defer os.Remove(f.Name())

    _, err = f.Write([]byte{1, 2, 3, 4})
    check(err)
}

在这个过程中并不能删掉所创建的临时文件,因为此时*File未关闭(造成存在一个process 正在访问file),导致os.Remove()无法访问,进行删除。 故应该修改为:

func check(e error) {
    if e != nil {
        panic(e)
    }
}

func main() {

    f, err := os.CreateTemp("", "sample")
    check(err)

    fmt.Println("Temp file name:", f.Name())

    defer os.Remove(f.Name())
    defer f.Close()
    _, err = f.Write([]byte{1, 2, 3, 4})
    check(err)
}

zmc-x avatar Apr 17 '23 07:04 zmc-x