github.com/rclone/rclone@v1.66.1-0.20240517100346-7b89735ae726/backend/local/setbtime_windows.go (about) 1 //go:build windows 2 3 package local 4 5 import ( 6 "syscall" 7 "time" 8 ) 9 10 const haveSetBTime = true 11 12 // setBTime sets the birth time of the file passed in 13 func setBTime(name string, btime time.Time) (err error) { 14 pathp, err := syscall.UTF16PtrFromString(name) 15 if err != nil { 16 return err 17 } 18 h, err := syscall.CreateFile(pathp, 19 syscall.FILE_WRITE_ATTRIBUTES, syscall.FILE_SHARE_WRITE, nil, 20 syscall.OPEN_EXISTING, syscall.FILE_FLAG_BACKUP_SEMANTICS, 0) 21 if err != nil { 22 return err 23 } 24 defer func() { 25 closeErr := syscall.Close(h) 26 if err == nil { 27 err = closeErr 28 } 29 }() 30 bFileTime := syscall.NsecToFiletime(btime.UnixNano()) 31 return syscall.SetFileTime(h, &bFileTime, nil, nil) 32 }