linux - 如何在不同的操作系统上处理 fileinfo.sys()
问题描述
希望在一个可以在 linux 和 windows 中使用的包中提取文件的文件属性。
使用 go,在 windows 中我可以成功获取文件的属性:
path = Filename, i.e. c:\123.txt
fileinfo, _ := os.Stat(path)
stat := fileinfo.Sys().(*syscall.Win32FileAttributeData)
aTimeSince = time.Since(time.Unix(0, stat.LastAccessTime.Nanoseconds()))
cTimeSince = time.Since(time.Unix(0, stat.CreationTime.Nanoseconds()))
mTimeSince = time.Since(time.Unix(0, stat.LastWriteTime.Nanoseconds()))
同样,我也可以在 Linux 中获得相同的信息:
fileinfo, _ := os.Stat(path)
aTime = fileinfo.Sys().(*syscall.Stat_t).Atim
cTime = fileinfo.Sys().(*syscall.Stat_t).Ctim
mTime = fileinfo.Sys().(*syscall.Stat_t).Mtim
aTimeSince = time.Since(time.Unix(aTime.Sec, aTime.Nsec))
cTimeSince = time.Since(time.Unix(cTime.Sec, cTime.Nsec))
mTimeSince = time.Since(time.Unix(mTime.Sec, mTime.Nsec))
但是,当我将这两个语句合并到一个 go 文件中时,Linux 拒绝 windows 代码,而 windows 拒绝 Linux 代码。
阅读 go 手册,状态我需要为操作系统指定 $GOOS,但不确定如何执行此操作并且无法在任何地方找到它。
带有 if runtime.GOOS 语句的完整代码示例:
if runtime.GOOS == "windows" {
fileinfo, _ := os.Stat(path)
stat := fileinfo.Sys().(*syscall.Win32FileAttributeData)
aTimeSince = time.Since(time.Unix(0, stat.LastAccessTime.Nanoseconds()))
cTimeSince = time.Since(time.Unix(0, stat.CreationTime.Nanoseconds()))
mTimeSince = time.Since(time.Unix(0, stat.LastWriteTime.Nanoseconds()))
} else {
fileinfo, _ := os.Stat(path)
aTime = fileinfo.Sys().(*syscall.Stat_t).Atim
cTime = fileinfo.Sys().(*syscall.Stat_t).Ctim
mTime = fileinfo.Sys().(*syscall.Stat_t).Mtim
aTimeSince = time.Since(time.Unix(aTime.Sec, aTime.Nsec))
cTimeSince = time.Since(time.Unix(cTime.Sec, cTime.Nsec))
mTimeSince = time.Since(time.Unix(mTime.Sec, mTime.Nsec))
}
我也意识到 fileinfo.ModTime() 会给我两个操作系统的修改日期\时间,但这在 Linux 中没有正确反映,所以如果说一个文件被移动,cTime 被更新,而不是修改时间和我需要检查最后一个文件何时被修改、更改、访问等。
任何帮助将不胜感激,谢谢。
解决方案
推荐阅读
- node.js - TypeORM 生产迁移的最佳实践
- html - 使用引导程序具有相同高度的 Div
- c++ - 未使用的函数参数可以优化掉吗?
- javascript - ReactJS - 如何区分我要显示的选择属性中的哪个选项?
- axon - 管理与聚合中外部组件的连接
- c - C语言中的uintptr_t和intptr_t
- c# - 如何使用 AJAX 发布对象并使用 ASP.NET Core MVC 控制器获取?
- vb.net - TEXT 数据类型在 Ms.Access 中变成 MEMO
- python - CSS未链接到Flask webapp中的HTML
- android - 三星健康 SDK 合作伙伴应用程序计划注册