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