- Saya perlu menulis fungsi yang ketika diberi jalur folder memindai file yang di-rooting di folder itu.
- Dan kemudian saya perlu menampilkan struktur direktori di folder itu.
Saya tahu bagaimana melakukan 2 (saya akan menggunakan jstree untuk menampilkannya di browser).
Jawaban:
EDIT : Cukup banyak orang yang masih mendapatkan jawaban ini, sehingga saya pikir saya akan memperbaruinya untuk Go1 API. Ini adalah contoh kerja filepath.Walk () . Yang asli ada di bawah.
Harap dicatat bahwa filepath.Walk berjalan di pohon direktori secara rekursif.
Ini adalah contoh run:
IKUTI JAWABAN ASLI: Antarmuka untuk jalur file berjalan telah berubah mulai mingguan.2011-09-16, lihat http://groups.google.com/group/golang-nuts/msg/e304dd9cf196a218 . Kode di bawah ini tidak akan berfungsi untuk versi rilis GO dalam waktu dekat.
Sebenarnya ada fungsi di lib standar hanya untuk ini: filepath.Walk .
sumber
filepath.Walk
tidak mengikuti symlink.filepath.Walk
Callback @FrancescoPasa akan dipicu di symlink (file dan direktori). Ya itu tidak akan mengikuti mereka, tetapi callback mengenali symlink dan mengambil tindakan lebih lanjut yaitu tindak lanjut yangfilepath.Walk
memastikan terlebih dahulu bahwa jalan tersebut belum dikunjungi.Berikut adalah cara mendapatkan informasi file untuk file dalam direktori.
sumber
Readdir
parameter metode adalahn
suatuint
. Jikan <= 0
,Readdir
mengembalikan semuaFileInfo
dari direktori dalam satu irisan.os
func (FileMode) IsRegular
.Berikut adalah contoh untuk mengulang semua file dan direktori secara rekursif. Perhatikan bahwa jika Anda ingin mengetahui apakah jalur yang Anda tambahkan adalah direktori, cukup centang "f.IsDir ()".
sumber
main
metode harus tidak memiliki([]string, error)
args dan Anda perlu melakukan sesuatu denganerr
. Kecuali pada saat menjawab itu valid? Jelas kesalahan kompilasi di versi yang lebih baru. Jika tidak, sangat berguna, terima kasih.Paket
github.com/kr/fs
menyediakanWalker
API yang sangat menarik.sumber
Paket standar Go
ioutil
memiliki fungsi bawaan untuk skenario kasus ini, lihat contoh di bawahsumber
Perhatikan bahwa "Walk tidak mengikuti tautan simbolik" jadi jika Anda ingin menulis fungsi yang melakukannya, saya sarankan ioutil.ReadDir . Tes benchmark saya sendiri menunjukkan bahwa itu lebih cepat dan lebih sedikit memori intensif daripada filepath. Glob . .
Selain itu,
ioutil.ReadDir
mengurutkan file berdasarkan nama dasar menggunakan perbandingan string dasar (strA > strB
). Sebagai seorang devops, saya biasanya mengurutkan nama dir dengan melakukan perbandingan numerik terbalik (build terbaru pertama misalnya). Jika itu juga kasus Anda, maka lebih baik memanggil os.ReadDir secara langsung (ioutil.ReadDir
memanggil ini di bawah sampul) dan melakukan penyortiran sendiri.Berikut adalah contoh
ReadDir
bagian dengan Urutan numerik:sumber
Anda mungkin ingin melakukan fungsi kari di sini, sehingga Anda dapat memanfaatkan pencarian sepenuhnya
sumber