Golang os.Rename(<;fromDir>;,<;toDir>;)在Windows中不工作

Golang os.Rename(<;fromDir>;,<;toDir>;)在Windows中不工作,windows,go,operating-system,directory,rename,Windows,Go,Operating System,Directory,Rename,根据文档,使用Go-lang,os.Rename应该能够重命名任何操作系统上的文件或目录 在Linux上,它可以正常工作,将文件或目录传递给它,然后移动文件或目录 在windows上,我在尝试传递文件夹时收到“拒绝访问”错误。 它100%适用于文件 例如: source=c:\sourcefolder destination=c:\destinationfolder 资料来源包括: C:\sourcefolder\file1.xml C:\sourcefolder\file2.xml C:\so

根据文档,使用Go-lang,os.Rename应该能够重命名任何操作系统上的文件或目录

在Linux上,它可以正常工作,将文件或目录传递给它,然后移动文件或目录

在windows上,我在尝试传递文件夹时收到“拒绝访问”错误。 它100%适用于文件

例如: source=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的访问权限,我得到drwxrwx并拥有对所有文件和目录的完全访问权限


这方面的任何帮助都将是巨大的,折磨着我的心。谢谢。

引自评论。解决了我的问题

如果windows资源管理器窗口不可用,则发现故障原因为 打开并查看正在移动的文件夹(即在 然后,访问被拒绝,因为它无法访问 移动文件夹。如果我最小化所有树的 源\目标文件夹不可见,请选择其他子文件夹 windows资源管理器中的文件夹,然后os.Rename会正常工作, 将所有内容从A移动到B非常快(根据linux)


您是否尝试过只移动(重命名)目录而不是逐个移动其文件?在运行上述代码之前是否创建了目标文件夹?
os.Rename()
的文档还指出:“当oldpath和newpath位于不同的目录中时,可能会应用特定于操作系统的限制。”我已经,已经尝试过先创建目标,已经尝试过空文件夹,等等。主要目的是加速使用robocopy的现有流程。通过在linux上使用此功能移动500 MB的文件夹,与使用mv相比,效率提高了2300%!为什么我也热衷于在windows中使用它,特别是在操作系统功能设计为通用的情况下。感谢您尝试过简单的
os。重命名(源、目标)
并在
destination
之前删除?很遗憾,是的:(我所能建议的就是提出一个新的Github问题,并引用另一个已解决的问题,详细说明您尝试了什么,并且已解决的问题没有提供解决方案。我必须关闭包括我的IDE在内的所有文件才能使命令正常工作。感谢您的帮助!它现在正在工作。