Golang os.Rename (<fromDir>, <toDir>) не работает в Windows - PullRequest
1 голос
/ 10 мая 2019

Используя 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 году, которая сообщаетэта ошибка и в соответствии с проблемой она была исправлена, но я не могу заставить это работать.Нигде больше, чем я могу найти списки, эта проблема идет на ура.

проверяя f.Mode для доступа, я получаю drwxrwxrwx и имею полный доступ ко всем файлам и каталогам.

Любая помощь с этимбыло бы здорово, ломая голову.Спасибо.

...