我不确定我这样做是否正确,但最终我想在目录中找到文件的最近修改日期并返回文件名。到目前为止,我的代码如下。有人可以帮我提供比这更有效的解决方案吗?我真的有一种感觉,这是 super hacky。我正在做的是获取日期并删除
package main
import (
"fmt"
"io/ioutil"
"os"
"strconv"
"strings"
)
func main() {
dir := "C:\\temp\\"
files, _ := ioutil.ReadDir(dir)
for _, f := range files {
fi, _ := os.Stat(dir + f.Name())
s := strings.Split(fi.ModTime().Format("2006-01-02 15.04.05.000"), " ")
fdate, err := strconv.Atoi(strings.Replace(s[0], "-", "", -1))
if err != nil {
fmt.Println(err)
}
ftime, err := strconv.Atoi(strings.Replace(s[1], ".", "", -1))
if err != nil {
fmt.Println(err)
}
fmt.Println(fi.Name(), fdate+ftime)
}
}
最佳答案
注重细节和效率。检查错误。你要求文件所以跳过目录和其他东西。允许多个文件具有相同的修改时间戳(例如,Windows 文件时间的分辨率最多为 100 纳秒)。您已经有了 ModTime(),所以不要调用 os.Stat()。直接使用 time.Time 方法。等等。
例如,
package main
import (
"fmt"
"io/ioutil"
"os"
"time"
)
func main() {
dir := `C:\temp\` // Windows directory
files, err := ioutil.ReadDir(dir)
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
var modTime time.Time
var names []string
for _, fi := range files {
if fi.Mode().IsRegular() {
if !fi.ModTime().Before(modTime) {
if fi.ModTime().After(modTime) {
modTime = fi.ModTime()
names = names[:0]
}
names = append(names, fi.Name())
}
}
}
if len(names) > 0 {
fmt.Println(modTime, names)
}
}
关于Golang 按日期和时间查找最近的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45578172/