• [Go] 获取文件夹下面指定模式的文件列表 , 并且获取文件创建时间删除超过30分钟的文件


    想要获取某个目录下以sess_开头的所有文件 , 如果是linux下可以直接sess*  , go标准库中也有同样的函数可以实现

    files,_:=filepath.Glob("/sess_*")

    files就是全部的文件列表 , 直接for range循环就可以了

    要对winows和linux分开处理 , windows下获取文件的创建时间

    func GetFileCreateTime(path string) int64{
        osType := runtime.GOOS
        fileInfo, _ := os.Stat(path)
        if osType == "windows" {
            wFileSys := fileInfo.Sys().(*syscall.Win32FileAttributeData)
            tNanSeconds := wFileSys.CreationTime.Nanoseconds()  /// 返回的是纳秒
            tSec := tNanSeconds/1e9                             ///秒
            return tSec;
        }
        return time.Now().Unix()
    }
    

    linux下获取文件的创建时间

    func GetFileCreateTime(path string) int64{
        osType := runtime.GOOS
        fileInfo, _ := os.Stat(path)
        if osType == "linux" {
            stat_t := fileInfo.Sys().(*syscall.Stat_t)
            tCreate := int64(stat_t.Ctim.Sec)
            return tCreate
        }
        return time.Now().Unix()
    }
    

    当在window下编译运行的时候 , linux部分代码会报错 , 需要把这个文件单独拿出来变成比如  test_linux.go , 这样windows下不会报错

    还有一种方式是在文件开头加上注释  , 这样也表示在windows下不会被编译

    //+build !windows

     

    后台任务获取指定文件创建时间并且删除掉超过30分钟的文件完整代码是:

    //+build !linux
    
    package controller
    
    import (
        "github.com/taoshihan1991/imaptool/config"
        "os"
        "path/filepath"
        "runtime"
        "syscall"
        "time"
    )
    var osType = runtime.GOOS
    const expireTime=30*60
    //检测权限文件是否过期,超过30分钟删除掉
    func TimerSessFile(){
        go func() {
            for {
                time.Sleep(time.Second*10)
                files,_:=filepath.Glob(config.Dir+"sess_*")
                for _,file:=range files{
                    fileInfo, _ := os.Stat(file)
                    var createTime int64
                    now:=time.Now().Unix()
                    if osType == "windows" {
                        wFileSys := fileInfo.Sys().(*syscall.Win32FileAttributeData)
                        tNanSeconds := wFileSys.CreationTime.Nanoseconds()  /// 返回的是纳秒
                        createTime = tNanSeconds/1e9                             ///
                    }
                    diffTime:=now-createTime
                    if diffTime>expireTime{
                        os.Remove(file)
                    }
                }
            }
        }()
    }

      

  • 相关阅读:
    2019年6月4号总结
    2019年5月21号总结
    2019年5月8号总结
    2019年5月6号总结
    2019年5月5号总结
    2019年4月18号总结
    java错误笔记之判断字符知否为空出错
    错误笔记:静态方法不能实例化,直接用类名.方法名调用
    Thymeleaf中"th:each""th:if"的用法解析
    @ResponseBody 表示返回的是josn
  • 原文地址:https://www.cnblogs.com/taoshihan/p/13087818.html
Copyright © 2020-2023  润新知