//go:build windows // +build windows package local import ( "fmt" "os" "syscall" "time" "github.com/rclone/rclone/fs" ) // Read the time specified from the os.FileInfo func readTime(t timeType, fi os.FileInfo) time.Time { stat, ok := fi.Sys().(*syscall.Win32FileAttributeData) if !ok { fs.Debugf(nil, "didn't return Win32FileAttributeData as expected") return fi.ModTime() } switch t { case aTime: return time.Unix(0, stat.LastAccessTime.Nanoseconds()) case bTime: return time.Unix(0, stat.CreationTime.Nanoseconds()) } return fi.ModTime() } // Read the metadata from the file into metadata where possible func (o *Object) readMetadataFromFile(m *fs.Metadata) (err error) { info, err := o.fs.lstat(o.path) if err != nil { return err } stat, ok := info.Sys().(*syscall.Win32FileAttributeData) if !ok { fs.Debugf(o, "didn't return Win32FileAttributeData as expected") return nil } // FIXME do something with stat.FileAttributes ? m.Set("mode", fmt.Sprintf("%0o", info.Mode())) setTime := func(key string, t syscall.Filetime) { m.Set(key, time.Unix(0, t.Nanoseconds()).Format(metadataTimeFormat)) } setTime("atime", stat.LastAccessTime) setTime("mtime", stat.LastWriteTime) setTime("btime", stat.CreationTime) return nil }