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

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

更新日:2020/06/11

 

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

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

ファイルまたはディレクトリの存在を確認するだけなら、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( er.message );
        }
    }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+" 書き込み&読み込みで開く。

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

ファイルが

存在すればエラー。

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

更新日:2020/06/11

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

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

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

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

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

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

 

このサイトは、リンクフリーです。大歓迎です。