Golang os.Rename(<fromdir>,<todir>)在Windows中不起作用

时间:2019-05-10 10:30:16

标签: windows go operating-system directory rename

根据文档,使用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,并且可以完全访问所有文件和目录。

任何有关此的帮助都将为您带来极大的帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

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

  

如果Windows资源管理器窗口为   可以打开,并且可以看到正在移动的文件夹(即在   左侧或右侧窗格中的树),则访问被拒绝,因为它不能   移动文件夹。如果我最小化所有树,以便   源\目标文件夹不可见,然后选择其他子   Windows资源管理器中的文件夹,然后os.Rename可以正常工作,   将所有内容从A移到B的速度非常快(根据linux)