2017-06-06 9 views
2

GOは、path/filepathパッケージのfilepath.Walkという名前で、すぐにディレクトリの反復機能を提供します。ファイルの時刻に基づいてディレクトリ順に並べ替える方法

ただし、filepath.Walkwalks the file tree in lexical orderです。最終更新日の順にファイルツリーをどのように歩くことができますか? THX

PS(答えを受け入れた後)私は行くfilepath.Walk機能がtype ByModTimeを受け入れることは、人々がソートするためにそれが取るすべてである以下の答え、のように、人々は、ソート自身を提供するための方法を提供すべきだと思います自分自身をファイル化する。

答えて

3

filepath.Walkは注文を設定できないので、自分で実装する必要があります。

Walkの方法をご覧ください。それはreadDirNamesのファイル名に依存しているwalkを呼び出します。したがって、基本的には、別のreadDirNamesロジックを使用して独自のWalkメソッドを作成する必要があります。ここで

あなたは(私はエラーを無視してることに注意してください、)最終更新日時の順でファイルを取得する方法は次のとおりです。

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

優れた実装〜 –

関連する問題