star/filedate/filedate_darwin.go

39 lines
704 B
Go
Raw Normal View History

//go:build darwin
package filedate
import (
"fmt"
"os"
"time"
)
func SetFileTime(path string, ctime, atime, mtime time.Time) error {
var err error
originalAtime := atime
originalMtime := mtime
if atime.IsZero() || mtime.IsZero() {
var fi os.FileInfo
fi, err = os.Stat(path)
if err != nil {
return fmt.Errorf("failed to get file info: %w", err)
}
// 获取原始时间
if atime.IsZero() {
originalAtime = fi.ModTime() // macOS 没有访问时间,使用修改时间代替
}
if mtime.IsZero() {
originalMtime = fi.ModTime()
}
}
err = os.Chtimes(path, originalAtime, originalMtime)
if err != nil {
return fmt.Errorf("Chtimes failed: %w", err)
}
return nil
}