Maison  >  Article  >  développement back-end  >  GOLANG - Rechercher des fichiers créés dans une certaine plage de dates

GOLANG - Rechercher des fichiers créés dans une certaine plage de dates

WBOY
WBOYavant
2024-02-09 22:30:08998parcourir

GOLANG - 查找在某个日期范围内创建的文件

Dans notre travail quotidien, nous avons souvent besoin de retrouver des fichiers créés dans une certaine plage de dates. Dans GOLANG, nous pouvons utiliser certaines fonctions et bibliothèques intégrées pour réaliser cette fonction. Dans cet article, l'éditeur PHP Xiaoxin expliquera comment utiliser le langage de programmation GOLANG pour implémenter la fonction de recherche de fichiers dans une plage de dates spécifiée. Que ce soit pour le travail quotidien ou des projets personnels, cette fonction est très pratique, découvrons-le ensemble !

Contenu de la question

Je souhaite savoir comment rechercher des fichiers dans un dossier spécifique dans une certaine plage de dates. Par exemple : je souhaite rechercher tous les fichiers du dossier x créés entre le 1er août 2013 et le 31 août 2013.

J'ai essayé ceci :

dir := "path/to/dir"
t, err := time.Parse("2006-01-02T15:04:05-07:00", "2018-04-07T05:48:03+08:00")

if err != nil {
    panic(err)
}

paths, infos, err := FindFilesAfter(dir, t)
if err != nil {
    panic(err)
}

for i, _ := range paths {
    checkFile(paths[i], infos[i])
}

func FindFilesAfter(dir string, t time.Time) (paths []string, infos []os.FileInfo, err error) {
    err = filepath.Walk(dir, func(p string, i os.FileInfo, e error) error {
        if e != nil {
            return e
        }

        if !i.IsDir() && i.ModTime().After(t) {
            paths = append(paths, p)
            infos = append(infos, i)
        }
        return nil
    })
    return
}

Solution

J'espère que la réponse suivante correspond à ce que vous recherchez. ​​p>

  • Si votre question concerne davantage la plage horaire, vous pouvez utiliser time 包中的函数 beforeafter
  • Si votre question concerne davantage la recherche de l'heure de création que l'heure de modification. Vous pourriez envisager d'utiliser le package syscall pour trouver atime, mtime et ctime - ce sont essentiellement :

atime (temps d'accès) est le temps d'accès au fichier

mtime (heure de modification) est l'heure de modification du fichier

ctime (heure de changement) est l'heure de changement d'inode ou de fichier

package main

import (
    "io/fs"
    "log"
    "os"
    "syscall"
    "time"
)

func main() {
    // prepare data
    start, _ := time.Parse(time.RFC3339, "2022-11-26T07:04:05Z")
    end, _ := time.Parse(time.RFC3339, "2022-11-26T08:10:00Z")
    var dir = "your path"

    files := FindFilesByDateRange(dir, start, end)

    // print result
    log.Printf("file range: %s-%s\n", start.Format(time.RFC3339), end.Format(time.RFC3339))
    for _, f := range files {
        log.Println(f.Name())
    }

}

func FindFilesByDateRange(dir string, start, end time.Time) []fs.FileInfo {
    fileSystem := os.DirFS(dir)
    var files []fs.FileInfo
    if err := fs.WalkDir(fileSystem, ".", func(path string, d fs.DirEntry, err error) error {
        if err != nil {
            log.Fatal(err)
        }
        fileInfo, err := d.Info()
        if err != nil {
            return err
        }
        stat := fileInfo.Sys().(*syscall.Stat_t)
        cDate := time.Unix(stat.Ctimespec.Sec, stat.Ctimespec.Nsec).UTC()
        if !d.IsDir() && (cDate.After(start) && cDate.Before(end)) {
            files = append(files, fileInfo)
        }
        return nil
    }); err != nil {
        return nil
    }
    return files
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer