简言

1. golang为我们提供了完善的文件操作库,例如os,ioutil等

2. 如果你还不知道如何获取目录下的所有文件

3. 如果只修改文件的最后访问时间,最后修改时间,可以使用os.Chtimes()函数

4. 如果还需要修改文件的创建时间,使用os.Chtimes()就不行了

效果如下图

这个是文件目录图                    执行效果如下图(可以看到所有文件的最后访问时间,最后修改时间都改成了当前时间)

golang修改文件的最后访问时间,最后修改时间_修改时间

   

golang修改文件的最后访问时间,最后修改时间_修改时间_02

完整代码如下

package main
import (
"fmt"
"io/ioutil"
"os"
"syscall"
"time"
)
// 递归获取指定目录下的所有文件名
func GetAllFile(pathname string) ([]string, error) {
result := []string{}

fis, err := ioutil.ReadDir(pathname)
if err != nil {
fmt.Printf("读取文件目录失败,pathname=%v, err=%v \n",pathname, err)
return result, err
}

// 所有文件/文件夹
for _, fi := range fis {
fullname := pathname + "/" + fi.Name()
// 是文件夹则递归进入获取;是文件,则压入数组
if fi.IsDir() {
temp, err := GetAllFile(fullname)
if err != nil {
fmt.Printf("读取文件目录失败,fullname=%v, err=%v",fullname, err)
return result, err
}
result = append(result, temp...)
} else {
result = append(result, fullname)
}
}

return result, nil
}

// 把秒级的时间戳转为time格式
func SecondToTime(sec int64) time.Time {
return time.Unix(sec, 0)
}

// 打印文件的创建时间,最后访问时间,最后修改时间
func PrintFileTime(pathname string) {
// 获取文件原来的访问时间,修改时间
finfo, _ := os.Stat(pathname)
// 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))
}

func main() {
// 递归获取目录下的所有文件
var files []string
files, _ = GetAllFile("E:/test/go/modify_file_time_2")

fmt.Println("目录下的所有文件如下")
for i:=0;i<len(files);i++ {
fmt.Println("文件名:",files[i])

// 打印三个时间
PrintFileTime(files[i])

// 修改
fmt.Println("修改文件的最后访问时间,最后修改时间")
os.Chtimes(files[i], time.Now(), time.Now())

// 再次打印三个时间
PrintFileTime(files[i])
}
}