2017-06-06 117 views
2

Go提供了一個開箱即用的目錄迭代功能,filepath.Walk位於path/filepath包中。如何遍歷目錄,根據文件時間排序

但是,filepath.Walkwalks the file tree in lexical order。我如何按照上次修改日期的順序走過文件樹? THX

PS(接受答案之後)我覺得圍棋filepath.Walk功能應該提供一種方法,爲人們提供自己的排序,像下面的答案,在接受type ByModTime是所有需要的人進行排序自己記錄自己。

回答

3

我想,你應該自己實現它,因爲filepath.Walk不允許你設置順序。

請看Walk方法。它叫walk,它依賴於readDirNames的文件名。所以基本上,你應該制定自己的Walk方法與另一個readDirNames邏輯。

這裏是你如何在最後修改日期的順序獲取文件(注意,說我忽略錯誤):

package main 

import (
    "fmt" 
    "os" 
    "sort" 
) 

type ByModTime []os.FileInfo 

func (fis ByModTime) Len() int { 
    return len(fis) 
} 

func (fis ByModTime) Swap(i, j int) { 
    fis[i], fis[j] = fis[j], fis[i] 
} 

func (fis ByModTime) Less(i, j int) bool { 
    return fis[i].ModTime().Before(fis[j].ModTime()) 
} 

func main() { 
    f, _ := os.Open("/") 
    fis, _ := f.Readdir(-1) 
    f.Close() 
    sort.Sort(ByModTime(fis)) 

    for _, fi := range fis { 
     fmt.Println(fi.Name()) 
    } 
} 
+0

好樣的!你讓它變得比我想象的更簡單!謝謝! – xpt

+0

優秀實施〜 –