github.com/ttys3/engine@v17.12.1-ce-rc2+incompatible/pkg/system/chtimes_windows.go (about)

     1  // +build windows
     2  
     3  package system
     4  
     5  import (
     6  	"time"
     7  
     8  	"golang.org/x/sys/windows"
     9  )
    10  
    11  //setCTime will set the create time on a file. On Windows, this requires
    12  //calling SetFileTime and explicitly including the create time.
    13  func setCTime(path string, ctime time.Time) error {
    14  	ctimespec := windows.NsecToTimespec(ctime.UnixNano())
    15  	pathp, e := windows.UTF16PtrFromString(path)
    16  	if e != nil {
    17  		return e
    18  	}
    19  	h, e := windows.CreateFile(pathp,
    20  		windows.FILE_WRITE_ATTRIBUTES, windows.FILE_SHARE_WRITE, nil,
    21  		windows.OPEN_EXISTING, windows.FILE_FLAG_BACKUP_SEMANTICS, 0)
    22  	if e != nil {
    23  		return e
    24  	}
    25  	defer windows.Close(h)
    26  	c := windows.NsecToFiletime(windows.TimespecToNsec(ctimespec))
    27  	return windows.SetFileTime(h, &c, nil, nil)
    28  }