核心代码

// 获取文件原来的访问时间,修改时间
finfo, _ := os.Stat(files[i])

// linux环境下代码如下
//linuxFileAttr := finfo.Sys().(*syscall.Stat_t)
//fmt.Println("文件创建时间", SecondToTime(linuxFileAttr.Ctim.Sec))
//fmt.Println("最后访问时间", SecondToTime(linuxFileAttr.Atim.Sec))
//fmt.Println("最后修改时间", SecondToTime(linuxFileAttr.Mtim.Sec))

// windows下代码如下
winFileAttr := finfo.Sys().(*syscall.Win32FileAttributeData)
fmt.Println("文件创建时间:",SecondToTime(winFileAttr.CreationTime.Nanoseconds()/1e9))
fmt.Println("最后访问时间:",SecondToTime(winFileAttr.LastAccessTime.Nanoseconds()/1e9))
fmt.Println("最后修改时间:",SecondToTime(winFileAttr.LastWriteTime.Nanoseconds()/1e9))
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

判断系统类型

//runtime.GOARCH 返回当前的系统架构;runtime.GOOS 返回当前的操作系统。
sysType := runtime.GOOS

if sysType == "linux" {
 // LINUX系统
 fmt.Println("Linux system")
}

if sysType == "windows" {
 // windows系统
 fmt.Println("Windows system")
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

Windows获取文件创建时间和修改时间的代码

package main

import (
 "fmt"
 "os"
 "syscall"
)

func main() {
 filePath := "tmp/test"
 var createTime int64
 var modifyTime int64
 finfo, _ := os.Stat(filePath)
 //if runtime.GOOS == "windows" {
 // winFileAttr := finfo.Sys().(*syscall.Win32FileAttributeData)
 // createTime = winFileAttr.CreationTime.Nanoseconds() / 1000 / 1000
 // modifyTime = winFileAttr.LastWriteTime.Nanoseconds() / 1000 / 1000
 //} else if runtime.GOOS == "linux" {
 // linuxFileAttr := finfo.Sys().(*syscall.Stat_t)
 // createTime = linuxFileAttr.Ctim.Sec * 1000
 // modifyTime = linuxFileAttr.Mtim.Sec * 1000
 //}

 winFileAttr := finfo.Sys().(*syscall.Win32FileAttributeData)
 createTime = winFileAttr.CreationTime.Nanoseconds() / 1000 / 1000
 modifyTime = winFileAttr.LastWriteTime.Nanoseconds() / 1000 / 1000

 fmt.Println("文件创建时间:", createTime)
 fmt.Println("最后修改时间:", modifyTime)
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.

获取文件夹下每个文件的大小和创建时间以及修改时间

package main

import (
 "fmt"
 "os"
 "syscall"
)

func main() {
 dir := "tmp"
 files, _ := os.ReadDir(dir)
 for _, file := range files {
  filePath := fmt.Sprintf("%s/%s", dir, file.Name())
  var createTime int64
  var modifyTime int64
  var size int64

  finfo, _ := os.Stat(filePath)

  size = finfo.Size()
  winFileAttr := finfo.Sys().(*syscall.Win32FileAttributeData)
  createTime = winFileAttr.CreationTime.Nanoseconds() / 1000 / 1000
  modifyTime = winFileAttr.LastWriteTime.Nanoseconds() / 1000 / 1000
  fmt.Println("文件创建时间:", createTime)
  fmt.Println("最后修改时间:", modifyTime)
  fmt.Println("文件大小:", size)
 }

}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.

本文使用  markdown.com.cn 排版