func modifyFileTime(path string, ftime syscall.Filetime) error { fd, err := syscall.Open(path, os.O_RDWR, 0755) if err != nil { fmt.Println(path, err) } err = syscall.SetFileTime(fd, &ftime, &ftime, &ftime) if err != nil { fmt.Println(path, err) } syscall.Close(fd) return err }
//setCTime will set the create time on a file. On Windows, this requires //calling SetFileTime and explicitly including the create time. func setCTime(path string, ctime time.Time) error { ctimespec := syscall.NsecToTimespec(ctime.UnixNano()) pathp, e := syscall.UTF16PtrFromString(path) if e != nil { return e } h, e := syscall.CreateFile(pathp, syscall.FILE_WRITE_ATTRIBUTES, syscall.FILE_SHARE_WRITE, nil, syscall.OPEN_EXISTING, syscall.FILE_FLAG_BACKUP_SEMANTICS, 0) if e != nil { return e } defer syscall.Close(h) c := syscall.NsecToFiletime(syscall.TimespecToNsec(ctimespec)) return syscall.SetFileTime(h, &c, nil, nil) }