39 lines
704 B
Go
39 lines
704 B
Go
//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
|
|
}
|