为什么我的Go程序不能删除文件?
我编写了一个Go程序,用于侦听http请求:为什么我的Go程序不能删除文件?,go,Go,我编写了一个Go程序,用于侦听http请求: server := http.Server{ Addr: "0.0.0.0:65534", Handler: &MyHandler{}, ReadTimeout: 10 * time.Second, } server.ListenAndServe() 我将浏览器请求/退出映射设置为一个函数: func exit(w http.ResponseWriter, r *http.Request) {
server := http.Server{
Addr: "0.0.0.0:65534",
Handler: &MyHandler{},
ReadTimeout: 10 * time.Second,
}
server.ListenAndServe()
我将浏览器请求/退出映射设置为一个函数:
func exit(w http.ResponseWriter, r *http.Request) {
DeleteCache("../upload")
defer os.Exit(0)
}
我想删除文件夹../upload中的文件,我的DeleteCache函数如下所示:
func deletefile(path string, f os.FileInfo, err error) error {
if path == "../upload" {
return nil
}
err1 := os.Remove(path)
if err1 != nil {
log.Fatal(err1)
return err1
}
return err1
}
func DeleteCache(dirName string) {
err := filepath.Walk(dirName, deletefile)
checkNil(err)
}
func TestDeleteFile(t *testing.T) {
//service is a package name.
service.DeleteCache("../upload")
}
接下来,我编写了如下测试代码:
func deletefile(path string, f os.FileInfo, err error) error {
if path == "../upload" {
return nil
}
err1 := os.Remove(path)
if err1 != nil {
log.Fatal(err1)
return err1
}
return err1
}
func DeleteCache(dirName string) {
err := filepath.Walk(dirName, deletefile)
checkNil(err)
}
func TestDeleteFile(t *testing.T) {
//service is a package name.
service.DeleteCache("../upload")
}
测试代码可以运行得很好,它删除了文件夹中的所有文件../upload
但当我完全运行程序,然后打开浏览器access 0.0.0.0:65534/exit时,程序告诉我
删除../upload:目录不为空
除了/exit及其名为exit的处理函数之外,其他URL都可以正常运行
我想原因是GoHTTP列表服务和filepath.Walk之间存在冲突,它们不能同时运行。也许我应该用goroutines来运行它
如蒙答复,我将不胜感激 您可以使用os.RemoveAll../upload:
您可以使用os.RemoveAll../upload:
不确定,但是,当你浏览目录时,你不是要先删除父目录吗?您可能需要先删除最深的文件/dir,然后删除父文件。请参阅:@Jean Françoisfare I已将函数deletefile更新为除父文件外的其他文件。但不起作用。@Amd谢谢!这对我来说很有效。在你的退出手柄中,延迟是不必要的。我不确定,但是,当你走dirs时,你不是要先删除父母吗?您可能需要先删除最深的文件/dir,然后删除父文件。请参阅:@Jean Françoisfare I已将函数deletefile更新为除父文件外的其他文件。但不起作用。@Amd谢谢!这对我来说很有效。在你的出口处理中,延期是不必要的