[解決済み] ファイルシステム・スキャンの実行方法
2022-11-16 10:06:19
質問
- 私はフォルダのパスが与えられたときに、そのフォルダのルートファイルをスキャンする関数を書く必要があります。 そのフォルダにルートされたファイルをスキャンします。
- そして、そのフォルダのディレクトリ構造を表示する必要があります。
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)
}
関連
-
[解決済み] Linuxで特定のテキストを含むすべてのファイルを検索するにはどうすればよいですか?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] Pythonでファイルやフォルダを削除する方法は?
-
[解決済み] SVNでディレクトリを無視するには?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Git リポジトリに空のディレクトリを追加するには?
-
[解決済み] Ansibleで空のファイルを作成するには?
-
[解決済み] scpでdirを再帰的にコピーするときにファイルをフィルタリングする方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン