根据文档,使用Go-lang,os.Rename应该能够在任何操作系统上重命名文件或目录。
在Linux上,它可以正常工作,将文件或目录传递到其中,然后移动文件或目录。
在Windows上,我尝试传递文件夹时收到“访问被拒绝”错误。 可以100%用于文件。
示例: 源= c:\ sourcefolder destination = c:\ destinationfolder
源包含: C:\ sourcefolder \ file1.xml C:\ sourcefolder \ file2.xml C:\ sourcefolder \ foldername1 C:\ sourcefolder \ foldername1 \ file3.xml C:\ sourcefolder \ foldername2 C:\ sourcefolder \ foldername2 \ file4.xml
file1.xml和file2.xml都将成功复制到c:\ destination。 但是文件夹中的文件夹和文件崩溃,访问被拒绝
脚本非常简单:
source := "C:\\sourcefolder"
destination := "C:\\destinationfolder"
pathSeperator := "\\"
files, err := ioutil.ReadDir(source)
if err != nil {
fmt.Println("Move command execution error: ", err)
}
for _, f := range files {
fmt.Println(f.Name())
fmt.Println(f.Mode())
err := os.Rename(source+pathSeperator+f.Name(), destination+pathSeperator+f.Name())
if err != nil {
fmt.Println("Move command execution error: ", err)
panic(err)
}
}
搜索了stackoverflow和golang的资源后,我发现了2016年列出的报告此错误的问题,并且根据该问题已解决,但我无法使其正常工作。我没有其他地方可以找到此问题的清单golang。
检查f.Mode的访问权限,我得到了drwxrwxrwx,并且可以完全访问所有文件和目录。
任何有关此的帮助都将为您带来极大的帮助。谢谢。
答案 0 :(得分:0)
引自评论。解决了我的问题。
如果Windows资源管理器窗口为 可以打开,并且可以看到正在移动的文件夹(即在 左侧或右侧窗格中的树),则访问被拒绝,因为它不能 移动文件夹。如果我最小化所有树,以便 源\目标文件夹不可见,然后选择其他子 Windows资源管理器中的文件夹,然后os.Rename可以正常工作, 将所有内容从A移到B的速度非常快(根据linux)