MENU

サーバーサイドファイル操作

【Node.js】 ファイル・ディレクトリの存在を確認する方法

更新日:2020/06/11

 

■お願い
去年ECMAScript2020を頑張って日本語訳しましたが、誰も見てくれません・・・
誰かみて!!
【JavaScript】 学習のためECMAScript2020を日本語訳してみました

ファイル・ディレクトリの存在を確認するメソッド

 

あるかどうかだけわかればいい場合

 

ファイルまたはディレクトリの存在を確認するだけなら、fs.existsSync()メソッドを使用します。

 


const fs = require('fs');

const path = "ファイルパス";

if( fs.existsSync( path ){
    console.log( "存在します。");
}else{
    console.log( "存在しません。");
}

 

以前はfs.exists()メソッドを使用できましたが、現在は非推奨となっています。

 

 

ファイルの情報を知りたい場合

 

存在だけでなく、ファイルかディレクトリかなど、ファイルの情報を知りたい場合はfs.stat()メソッドを使用します。

 


const fs = require('fs');

const path = "ファイルパス";

fs.stat( path , ( er , stat ) => {
    if( er ){
        if (er.code === "ENOENT") {
            console.log("ファイル・ディレクトリは存在しません。");
        } else {
            console.log( error );
        }
    }else{
        console.log( stat );
        console.log( ( stat.isFile() ? "ファイル" : stat.isDirectory() ? "ディレクトリ" : "不明" ) + "です");
    }
});

確認後ファイルをオープンする場合

 

Node.jsではファイルの存在を確認後、ファイルをオープンすることは非推奨になっています。

 

このように書くと、意味がわかりませんね。

 

ファイルの確認はオープンするメソッドが行っているので、二度手間になります。
また確認後に、他のプロセスなどで削除を行い、状態が変化するケースも考えられます。

 

そのような理由から、存在確認をしないでファイルのオープンや読み込み・書き込みをすることが推奨されています。

 

ファイルのオープンは、fs.open()メソッドでおこないます。

 


fs.open( path ,  flg , ( err, fd )  => {
    if ( err ) { console.log( "ファイルが開けない" ); }
});

 

 

このとき、二番目の引数(flg)を適切に扱う必要があります。

 

flgの値 意味 エラー
"a"  追加モードで開く。

ファイルが存在しない場合新規作成されます。

"ax"  追加モードで開く。

ファイルが存在しない場合新規作成されます。

ファイルが

存在すればエラー。

"a+"  読み込み&追加モードで開く。

ファイルが存在しない場合新規作成されます。

"ax+"  読み込み&追加モードで開く。

ファイルが存在しない場合新規作成されます。

ファイルが

存在すればエラー。

"r"  読み込みモードで開く。 ファイルが

存在しなければエラー。

"r+"  読み込み&書き込みで開く。 ファイルが

存在しなければエラー。

"w"  書き込みで開く。

既存ファイルは削除される。

"wx"  書き込みで開く。

既存ファイルは削除される。

ファイルが

存在すればエラー。

"w+"  書き込み&読み込みで開く。

既存ファイルは削除される。

"wx+"  書き込み&読み込みで開く。

既存ファイルは削除される。

ファイルが

存在すればエラー。

 

ファイルの存在の有無でどのようにファイルが操作されるのかを把握して、使用する必要があります。

記事の内容について

 

こんにちはけーちゃんです。
説明するのって難しいですね。


「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。

そんなときは、ご意見もらえたら嬉しいです。

ご意見はこちら。
https://note.affi-sapo-sv.com/info.php

【お願い】

お願い

■このページのURL


■このページのタイトル


■リンクタグ