以下代码适用于Windows:
//suppose I have a fname folder in c:\temp
mydir := "C:\\temp\\dname"
cmd, e := exec.Command("cmd", "/C", " rmdir /S /Q", mydir).Output()
但如果文件夹名称中有空格,则会失败,例如:
mydir := "C:\\temp\\name with space"
Golang os.RemoveAll
可以使用空格处理文件夹名称,但在以下情况下会失败:
C:\> mkdir myprj
C:\> cd myprj
C:\myprj> git init
//add some file
C:\myprj> git add .
C:\myprj> git commit -m "Add my files"
//
//This won't work
err := os.RemoveAll("C:/myprj")
有关如何使用Go?
在Windows中完全删除文件夹的任何想法 \\
或/
是同一个错误:
func main() {
if e := os.RemoveAll("c:\\temp\\myprj"); e != nil {
fmt.Println(e)
}
}
//OUTPUT
remove c:\temp\myprj\.git\objects\2b\018ef36e172ae05842a9326fc73f1c8baa3254: Access is denied.
但我可以使用此命令删除该文件夹:
C:\> rmdir /S /Q c:\temp\myprj
// or from windows file explore without any problem
答案 0 :(得分:0)
我在我的窗户上做了同样的事情也得到了同样的错误。但是我注意到myprj文件夹是readonly(在属性中)所以我关闭它然后代码工作。
实际上我在c:\上创建的每个文件夹默认都是“只读”。
这不适用于属性为“只读(仅适用于文件夹中的文件)”的空文件夹。“
答案 1 :(得分:0)
我发现这种方法效果很好:
创建批处理文件myrmdir.bat
:
@echo off
RMDIR /S /Q %1
将此文件放在与代码相同的文件夹中,并使用以下命令调用:
//Yes, I can use / instead of \\ and it works
myfolder := "c:/temp/folder with space"
exec.Command("cmd", "/C", "myrmdir.bat", myfolder).Run()
希望这会对你有所帮助。如果你有更好的解决方案(尤其是纯Golang解决方案),请告诉我。