zoukankan      html  css  js  c++  java
  • [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)
                    }
                }
            }
        }()
    }

      

  • 相关阅读:
    《网络》:关于计算机网络的必备常识【无序】(不定时更新)
    《网络》:设置三个密码:通过console口连接设备,进入特权模式,登录Telnet
    《网络》:交换机基本配置命令
    启动eclipse时出现“Failed to load the JNI shared library jvm.dll”错误及解决
    java之servlet小记
    Nokia大事录
    Android之HandlerThread
    Android进程间的通信之AIDL
    Android进程间的通信之Messenger
    Loaders
  • 原文地址:https://www.cnblogs.com/taoshihan/p/13087818.html
Copyright © 2011-2022 走看看