[解決済み] Node.jsでファイル/ディレクトリが存在するかどうかを同期的にチェックする
質問
を使用して、同期的にチェックするにはどうすればよいですか? node.js ファイルやディレクトリが存在するかどうか?
解決方法は?
この問いに対する答えは、時代とともに変化しています。その 現在 このページでは、その答えを一番上に掲載し、その後に歴代の答えを時系列で掲載しています。
現在の回答
を使用することができます。
fs.existsSync()
:
const fs = require("fs"); // Or `import fs from "fs";` with ESM
if (fs.existsSync(path)) {
// Do something
}
数年前から非推奨とされていましたが、現在は非推奨ではありません。docsから。
注意点
fs.exists()
は非推奨ですがfs.existsSync()
はありません。(この のコールバックパラメータはfs.exists()
は、以下のようなパラメータを受け付けます。 は、他のNode.jsコールバックと矛盾しています。fs.existsSync()
はありません。 はコールバックを使用します)。
具体的なご要望は
シンクロナス
をチェックしますが、もし
非同期
を使用してください(通常、I/Oは最適です)。
fs.promises.access
を使っている場合は
async
関数、または
fs.access
(以下
exists
は非推奨
) でない場合は
には
async
関数を使用します。
try {
await fs.promises.access("somefile");
// The check succeeded
} catch (error) {
// The check failed
}
またはコールバックで
fs.access("somefile", error => {
if (!error) {
// The check succeeded
} else {
// The check failed
}
});
歴史的な回答
ここでは、歴史的な回答を年代順にご紹介します。
-
2010年のオリジナル回答
(stat
/statSync
またはlstat
/lstatSync
) -
2012年9月更新
(exists
/existsSync
) -
2015年2月更新
(の廃止が迫っているためexists
/existsSync
に戻っていると思われます。stat
/statSync
またはlstat
/lstatSync
) -
2015年12月更新
(またfs.access(path, fs.F_OK, function(){})
/fs.accessSync(path, fs.F_OK)
しかし、ファイルやディレクトリが存在しない場合はエラーになることに注意してください。fs.stat
を使用することをお勧めします。fs.access
を開かずに存在を確認する必要がある場合) -
2016年12月更新
fs.exists()
はまだ非推奨ですがfs.existsSync()
はもう非推奨ではありません。ですから、もう安全に使うことができます。
2010年当時のオリジナル回答です。
を使用することができます。
statSync
または
lstatSync
(
ドキュメントリンク
を与える)。
fs.Stats
オブジェクト
. 一般に、ある関数の同期バージョンが利用可能な場合、非同期バージョンと同じ名前の
Sync
を末尾につけています。ですから
statSync
の同期バージョンです。
stat
;
lstatSync
の同期バージョンです。
lstat
など。
lstatSync
は、何かが存在するかどうか、存在する場合、それがファイルかディレクトリか (ファイルシステムによっては、シンボリックリンク、ブロックデバイス、キャラクタデバイスなど) の両方を知らせます、例えば、それが存在し、ディレクトリであるかどうかを知る必要がある場合。
var fs = require('fs');
try {
// Query the entry
stats = fs.lstatSync('/the/path');
// Is it a directory?
if (stats.isDirectory()) {
// Yes it is
}
}
catch (e) {
// ...
}
...そして同様に、ファイルであれば
isFile
ブロックデバイスの場合は
isBlockDevice
などなど。に注意してください。
try/catch
エントリーが存在しない場合はエラーになります。
を気にしないのであれば、エントリ
は
で、存在するかどうかだけを知りたい場合は
path.existsSync
(または最新で。
fs.existsSync
として使用することができます。
ユーザー618408の指摘
:
var path = require('path');
if (path.existsSync("/the/path")) { // or fs.existsSync
// ...
}
を必要としません。
try/catch
が、それが何であるかについての情報はなく、ただそこにあることを教えてくれる。
path.existsSync
はずっと前に非推奨となりました。
余談ですが、あなたは明示的に
同期的に
ということで、今回は
xyzSync
のバージョンがあります。しかし、可能な限り、I/Oでは、同期呼び出しは避けた方がよいでしょう。I/Oサブシステムへの呼び出しは、CPUから見てかなりの時間を要します。このように
lstat
よりも
lstatSync
:
// Is it a directory?
lstat('/the/path', function(err, stats) {
if (!err && stats.isDirectory()) {
// Yes it is
}
});
しかし、同期バージョンが必要な場合は、それがあります。
2012年9月更新
数年前の以下の回答は、現在では少し古くなっています。現在の方法は
fs.existsSync
を使用して、ファイルやディレクトリの存在を同期的にチェックします (あるいはもちろん
fs.exists
非同期チェックの場合)、むしろ
path
のバージョンを以下に示します。
例
var fs = require('fs');
if (fs.existsSync(path)) {
// Do something
}
// Or
fs.exists(path, function(exists) {
if (exists) {
// Do something
}
});
2015年2月更新
そして、2015年に入り、Nodeのドキュメントには次のように書かれています。
fs.existsSync
(そして
fs.exists
) "は非推奨になります"。 (Nodeの人々は、何かを開く前に存在するかどうかをチェックするのは馬鹿げていると考えているからです。それはそうですが、何かが存在するかどうかをチェックする唯一の理由ではありません!)
ということで、おそらくまたいろいろな
stat
というメソッドがあります... もちろん、これがまた変わるまで/変わらない限りは。
2015年12月更新
いつからあるのか知りませんが、こんなのもあります。
fs.access(path, fs.F_OK, ...)
/
fs.accessSync(path, fs.F_OK)
. そして、少なくとも2016年10月時点では
fs.stat
ドキュメント
を使用することを推奨しています。
fs.access
を使用して存在チェックを行います (
"ファイルが存在するかどうかを、その後に操作することなく確認すること。
fs.access()
をお勧めします。
). しかし、アクセスができないことは、次のように見なされることに注意してください。
エラー
そのため、ファイルがアクセス可能であることを期待している場合は、おそらくこれが最適でしょう。
var fs = require('fs');
try {
fs.accessSync(path, fs.F_OK);
// Do something
} catch (e) {
// It isn't accessible
}
// Or
fs.access(path, fs.F_OK, function(err) {
if (!err) {
// Do something
} else {
// It isn't accessible
}
});
2016年12月更新
を使用することができます。
fs.existsSync()
:
if (fs.existsSync(path)) {
// Do something
}
数年前から非推奨とされていましたが、現在は非推奨ではありません。docsから。
注意点
fs.exists()
は非推奨ですがfs.existsSync()
はありません。(この のコールバックパラメータはfs.exists()
は、以下のようなパラメータを受け付けます。 は、他のNode.jsコールバックと矛盾しています。fs.existsSync()
はありません。 はコールバックを使用します)。
関連
-
[解決済み】E11000重複キーエラー mongodb mongooseのインデックス
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] インストールされているnpmパッケージのバージョンを検索する
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] Node.jsでファイルを書き込む
-
[解決済み] Node.jsアプリケーションをデバッグするにはどうすればよいですか?
-
[解決済み] Node.jsのmodule.exportsの目的と使い方を教えてください。
-
[解決済み] Node.js上のExpress.jsでGET(クエリ文字列)変数を取得する方法とは?
-
[解決済み] Node.jsでディレクトリに存在するすべてのファイル名のリストを取得する方法は?
-
[解決済み] Node.jsで現在のスクリプトのパスを取得するにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] リソースの読み込みに失敗しました: net::ERR_CONNECTION_REFUSED : Nodejs
-
[解決済み] 非推奨パッケージに関するNPM警告メッセージ
-
[解決済み】"npm update -g" の後に "Cannot find module 'npmlog'" というエラーが発生する。
-
[解決済み】npx コマンドが見つかりません。
-
[解決済み] AWS s3 api error: specified bucket does not exist.
-
[解決済み] npm install エラー - ローカルの発行者証明書を取得できません。
-
[解決済み] E: npm パッケージを見つけることができません。
-
[解決済み] のエラーが発生しました。これはおそらくnpmの問題ではありません。上に追加のログ出力があると思われます
-
[解決済み] node.jsのセットアップウィザードが途中で終了してしまう
-
[解決済み】Node.jsでファイルへの書き込み時にディレクトリを作成する。