Rumah  >  Artikel  >  pembangunan bahagian belakang  >  GOLANG - Cari fail yang dibuat dalam julat tarikh tertentu

GOLANG - Cari fail yang dibuat dalam julat tarikh tertentu

WBOY
WBOYke hadapan
2024-02-09 22:30:08998semak imbas

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

Dalam kerja harian kita, kita selalunya perlu mencari fail yang dibuat dalam julat tarikh tertentu. Dalam GOLANG, kita boleh menggunakan beberapa fungsi dan perpustakaan terbina dalam untuk mencapai fungsi ini. Dalam artikel ini, editor PHP Xiaoxin akan memperkenalkan cara menggunakan bahasa pengaturcaraan GOLANG untuk melaksanakan fungsi mencari fail dalam julat tarikh tertentu. Sama ada untuk kerja harian atau projek peribadi, fungsi ini sangat praktikal, mari kita ketahui bersama!

Kandungan soalan

Saya ingin tahu cara mencari fail dalam folder tertentu dalam julat tarikh tertentu. Contohnya: Saya ingin mencari semua fail dalam folder x yang dibuat antara 1 Ogos 2013 dan 31 Ogos 2013.

Saya mencuba ini:

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
}

Penyelesaian

Semoga jawapan berikut adalah yang anda cari. ​​p>

  • Jika soalan anda lebih kepada julat masa, anda boleh gunakan time 包中的函数 beforeafter
  • Jika soalan anda lebih kepada mencari masa penciptaan dan bukannya masa pengubahsuaian. Anda mungkin mempertimbangkan untuk menggunakan pakej syscall untuk mencari atime, mtime dan ctime - pada asasnya ialah:

masa (masa capaian) ialah masa capaian fail

mtime (masa pengubahsuaian) ialah masa pengubahsuaian fail

ctime (masa tukar) ialah inod atau masa tukar fail

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
}

Atas ialah kandungan terperinci GOLANG - Cari fail yang dibuat dalam julat tarikh tertentu. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam