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

GOLANG - Cari fail yang dibuat dalam julat tarikh tertentu

WBOY
Lepaskan: 2024-02-09 22:30:08
ke hadapan
1034 orang telah melayarinya

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
}
Salin selepas log masuk

Penyelesaian

Semoga jawapan berikut adalah yang anda cari.

  • 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
}
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan