iT邦幫忙

0

在不知道主檔名狀態下,只用副檔名搜尋所有相同副檔名的檔案

想請問fs.readdir(path, [callback(err,files)])應該要怎麼用,Path的地方應該填甚麼?

我主要想要用的是在該目錄底下搜尋所有相同副檔名的資料,但不知道這個fuction該怎麼使用,假設我的路徑是C:\XXX\XXX.txt檔案,請問有範例可以直接帶入實驗的嗎,我是JS新手,請個位不吝教導,謝謝

1 個回答

2
froce
iT邦大師 3 級 ‧ 2018-09-06 16:10:42
最佳解答

篩選同資料夾下testfolder資料夾內,附檔名為html的檔案。
path就是路徑。

var fs = require('fs')

fs.readdir("testfolder", (err, files)=>{
    for (f of files){
        if (f.endsWith(".html")){
            console.log(f);
        }
    }
})

fs.readdir(path, [callback(err,files)])
文檔寫得很清楚了,必要的是路徑,後面的callback就是得到結果後該做的事。
[]框起來的是選填。

不過你文件是哪來的?新的版本說明是
https://nodejs.org/api/fs.html#fs_fs_readdir_path_options_callback

fs.readdir(path[, options], callback)

callback是必要的。
你的文件看起來是v6之前...

看更多先前的回應...收起先前的回應...
froce iT邦大師 3 級 ‧ 2018-09-06 16:16:50 檢舉

為了避免弄混,還有一個fs.readdirSync。
javascript是非同步的,後面有加Sync的會是同步的方法,會比較像一般語言的用法。

說真的,js易學難精,不太適合當第一個語言。
然後node.js版本又進很快,建議去學著看官方文件。

dance0531 iT邦新手 5 級 ‧ 2018-09-06 17:00:28 檢舉

回F大我是在這裡看的 https://www.teakki.com/p/57dfa85b3c20b02e90a0d3f6
,您的code是可以用的,真的很厲害,但還有幾個問題想請教
第一個問題:我送出這個處理後,我的瀏覽器上會顯示拒絕連線,但dos畫面上是顯示正確的檔案,請問是為什麼
https://ithelp.ithome.com.tw/upload/images/20180906/20109634mig1WYOaGr.png
第二個問題:我本身是在寫C++的,因為案子關係被趕鴨子上架寫JS,想請問您code里的for開始到console中間的格式,可否請您解析一下,看的不是很懂使用方法,麻煩您了

froce iT邦大師 3 級 ‧ 2018-09-06 19:42:06 檢舉

1.那要看你code才知道,沒看到debug訊息我只能先學通靈才能幫你。
2.都是ES6的新語法。看下面可以稍微知道。
http://caibaojian.com/toutiao/6864

// 這是箭頭函數
(err, files)=>{
    for (f of files){
        if (f.endsWith(".html")){
            console.log(f);
        }
    }
}

// 等效於下面
function(err, files){
    ....
}

of也是es6的新語法,可以迭代陣列的值,另外還有一個in,迭代的是陣列的index。
換回正常的寫法就痛苦了。

for (f of files){
        if (f.endsWith(".html")){
            console.log(f);
        }
}

// 等效於下面
for (let i = 0; i<files.length; i++){
    let f = files[i]
    if (f.endsWith(".html")){
        console.log(f);
    }
}

1的話另開主題問吧,因為寫在回應不太方便。
然後我node不是主力,說實話我只是稍微有興趣而已。

dance0531 iT邦新手 5 級 ‧ 2018-09-07 10:33:20 檢舉

稍有興趣能回答這麼精細,F大真的不檢單,謝謝您的回答~

我要發表回答

立即登入回答