Entoverse

Reactのこと

Node.js ファイル一覧削除

f:id:mojeld:20191125134831g:plain
Node.jsでファイルを削除する場合

const fs = require("fs")
fs.unlinkSync("ファイル名") //ファイル削除

上記のように、unlinkSync()関数を使って削除したいファイル名を指定すれば削除できます。しかし、複数ファイルを削除したい場合や特定の拡張子を削除したい場合いくつかの関数を組み合わせる必要があります。ちなみにPHPでも同じようにunlink()関数がありますがこの関数も同じくglob()という関数と組合わることで拡張子指定した一括削除などのプログラムを作成することができます。Node.jsは、PHPでいうglob()関数のような便利なものはありません。 Node.jsでは、readdir()RegExp()を組み合わせることで実現できます。

txt拡張子のファイル一覧を取得とファイル削除

RegExpを使ってtxtという拡張子だけ取り出すための定数を作成します。

const r1 = new RegExp(/.*\.txt$/)
const r2 = /.*\.txt$/

r1とr2は同じ意味です。new RegExp()を書く必要はありません。 つぎに、require("fs")readdir()と配列のフィルタリングを使います。

fs.readdir("./","utf8", (err, files)=>{
    files.filter(one_file => {
        return fs.statSync(one_file).isFile() && r1.test(one_file)
    }).forEach(a => {
        console.log(a)//ここをunlinkSync()に置き換えると削除できる
    })
})

実行するとconsole.log()にtxt拡張子だけが出力されています。 このconsole.log(a)部分をunlinkSync(a)に置き換えると削除できます。

同期の場合

同期でプログラムしたい場合は下記のようなプログラムです。

let files2 = fs.readdirSync("./","utf8")
let filter2 = files2.filter(one_file => { return fs.statSync(one_file).isFile() && r1.test(one_file) })
for(let i =0; i<filter2.length; i++){
    console.log(filter2[i])//ここをfs.unlinkSync(filter2[i])に変える
}

非同期でのファイル削除

非同期の場合unlinkSync()ではなくunlink()を使います。

fs.unlink("ファイル名", (err)=>{
    if(err) console.log(err)
    else console.log("unlink successfull")
})

https://amzn.to/2JKllev