1. ホーム
  2. file

[解決済み] ファイルシステム・スキャンの実行方法

2022-11-16 10:06:19

質問

  1. 私はフォルダのパスが与えられたときに、そのフォルダのルートファイルをスキャンする関数を書く必要があります。 そのフォルダにルートされたファイルをスキャンします。
  2. そして、そのフォルダのディレクトリ構造を表示する必要があります。

2の方法は知っています(jstreeを使ってブラウザに表示させるつもりです)。

どのように解決するのですか?

1.16の編集 : この回答はまだ多くの人がヒットするので、Go 1.16用に更新しておこうと思いました。

この関数は ファイルパス.WalkDir は、前の編集で紹介した filepath.Walk よりも性能が良くなっています。 以下は動作例です。

package main

import (
    "flag"
    "fmt"
    "io/fs"
    "path/filepath"
)

func visit(path string, di fs.DirEntry, err error) error {
    fmt.Printf("Visited: %s\n", path)
    return nil
}

func main() {
    flag.Parse()
    root := flag.Arg(0)
    err := filepath.WalkDir(root, visit)
    fmt.Printf("filepath.WalkDir() returned %v\n", err)
}

EDIT : この回答はまだ多くの人がヒットするので、Go1 API用に更新しようと思いました。 これは ファイルパス.ウォーク() . オリジナルは以下の通りです。

package main

import (
  "path/filepath"
  "os"
  "flag"
  "fmt"
)

func visit(path string, f os.FileInfo, err error) error {
  fmt.Printf("Visited: %s\n", path)
  return nil
} 


func main() {
  flag.Parse()
  root := flag.Arg(0)
  err := filepath.Walk(root, visit)
  fmt.Printf("filepath.Walk() returned %v\n", err)
}

filepath.Walkはディレクトリツリーを再帰的に走査することに注意してください。

これは実行例です。

$ mkdir -p dir1/dir2
$ touch dir1/file1 dir1/dir2/file2
$ go run walk.go dir1
Visited: dir1
Visited: dir1/dir2
Visited: dir1/dir2/file2
Visited: dir1/file1
filepath.Walk() returned <nil>

オリジナルの回答が続きます。 ファイルパスを歩くためのインターフェイスはweekly.2011-09-16で変更されましたので、以下を参照してください。 http://groups.google.com/group/golang-nuts/msg/e304dd9cf196a218 . 以下のコードは、近い将来のGOのリリースバージョンでは動作しません。

実は、このための関数が標準ライブラリにあります。 ファイルパス.ウォーク .

package main

import (
    "path/filepath"
    "os"
    "flag"
)

type visitor int

// THIS CODE NO LONGER WORKS, PLEASE SEE ABOVE
func (v visitor) VisitDir(path string, f *os.FileInfo) bool {
    println(path)
    return true
} 

func (v visitor) VisitFile(path string, f *os.FileInfo) {
    println(path)
}

func main() {
    root := flag.Arg(0)
    filepath.Walk(root, visitor(0), nil)
}