Hi @Juan Carlos Fernández Umaña
The issue is with the SDK, and you have already raised a GitHub issue for it.
As of now, alternatively, you can use the Azure Data Lake gen2 REST API with a SAS token in your environment.
In my environment, I tried exactly what you did with 5 test cases, creating and renaming directories using the REST API and a SAS token with the Go language.
Code:
package main
import (
"fmt"
"log"
"net/http"
"net/url"
"strings"
"time"
)
var (
account = "redacted"
fileSystem = "redacted"
sasToken = "Redacted"
)
func encodePath(path string) string {
segments := strings.Split(path, "/")
for i, seg := range segments {
segments[i] = url.PathEscape(seg)
}
return strings.Join(segments, "/")
}
func createDirectory(dir string) {
encoded := encodePath(dir)
url := fmt.Sprintf("https://%s.dfs.core.windows.net/%s/%s?resource=directory&%s", account, fileSystem, encoded, sasToken)
req, err := http.NewRequest("PUT", url, nil)
if err != nil {
log.Fatalf("Failed to create request to create directory: %v", err)
}
req.Header.Set("x-ms-version", "2021-10-04")
req.Header.Set("x-ms-date", time.Now().UTC().Format(http.TimeFormat))
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatalf("Create directory request failed: %v", err)
}
defer resp.Body.Close()
if resp.StatusCode >= 200 && resp.StatusCode < 300 {
fmt.Printf("Created source directory '%s'\n", dir)
} else {
fmt.Printf("Failed to create directory '%s': %d %s\n", dir, resp.StatusCode, resp.Status)
}
}
func renameDirectory(sourceDir, destDir string) {
sourcePath := encodePath(sourceDir)
destPath := encodePath(destDir)
destURL := fmt.Sprintf("https://%s.dfs.core.windows.net/%s/%s?%s", account, fileSystem, destPath, sasToken)
sourceWithSAS := fmt.Sprintf("/%s/%s?%s", fileSystem, sourcePath, sasToken)
req, err := http.NewRequest("PUT", destURL, nil)
if err != nil {
log.Fatalf("Failed to create rename request: %v", err)
}
req.Header.Set("x-ms-version", "2021-10-04")
req.Header.Set("x-ms-rename-source", sourceWithSAS)
req.Header.Set("x-ms-date", time.Now().UTC().Format(http.TimeFormat))
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatalf("Rename request failed: %v", err)
}
defer resp.Body.Close()
if resp.StatusCode >= 200 && resp.StatusCode < 300 {
fmt.Printf(" Renamed '%s' → '%s'\n", sourceDir, destDir)
} else {
fmt.Printf("Rename failed (%s → %s): %d %s\n", sourceDir, destDir, resp.StatusCode, resp.Status)
}
}
func main() {
fmt.Println("---- Starting Rename Tests ----")
createDirectory("oldDir01")
renameDirectory("oldDir01", "newDir01")
createDirectory("oldDir02")
renameDirectory("oldDir02", "new Dir02")
createDirectory("old Dir03")
renameDirectory("old Dir03", "newDir03")
createDirectory("oldDir/subDir04")
renameDirectory("oldDir/subDir04", "oldDir/newSubDir04")
createDirectory("old Dir/subDir05")
renameDirectory("old Dir/subDir05", "old Dir/newSubDir05")
fmt.Println("---- All Done ----")
}
Output:
PS C:\Users\xxx\xxxt\goproject\hello> go run hello.go
---- Starting Rename Tests ----
Created source directory 'oldDir01'
Renamed 'oldDir01' → 'newDir01'
Created source directory 'oldDir02'
Renamed 'oldDir02' → 'new Dir02'
Created source directory 'old Dir03'
Renamed 'old Dir03' → 'newDir03'
Created source directory 'oldDir/subDir04'
Renamed 'oldDir/subDir04' → 'oldDir/newSubDir04'
Created source directory 'old Dir/subDir05'
Renamed 'old Dir/subDir05' → 'old Dir/newSubDir05'
---- All Done ----
Portal:
Reference:
Path - Create - REST API (Azure Storage Services) | Microsoft Learn
Hope this answer helps! please let us know if you have any further queries. I’m happy to assist you further.
Please do not forget to "Accept the answer” and “up-vote” wherever the information provided helps you, this can be beneficial to other community members.