[解決済み] 標準C++/C++11,14,17/Cを使用してファイルが存在するかどうかを確認する最速の方法?
2022-03-18 11:24:33
質問
標準のC++11、14、17、またはCでファイルが存在するかどうかを確認する最も速い方法を見つけたいのですが、私は何千ものファイルを持っており、それらに対して何かをする前に、すべてのファイルが存在するかどうかを確認する必要があります。の代わりに何を書けばよいのでしょうか?
/* SOMETHING */
を以下の関数に追加してください。
inline bool exist(const std::string& name)
{
/* SOMETHING */
}
解決方法は?
そこで、これらのメソッドを10万回ずつ、存在するファイルと存在しないファイルに対して実行するテストプログラムを作成しました。
#include <sys/stat.h>
#include <unistd.h>
#include <string>
#include <fstream>
inline bool exists_test0 (const std::string& name) {
ifstream f(name.c_str());
return f.good();
}
inline bool exists_test1 (const std::string& name) {
if (FILE *file = fopen(name.c_str(), "r")) {
fclose(file);
return true;
} else {
return false;
}
}
inline bool exists_test2 (const std::string& name) {
return ( access( name.c_str(), F_OK ) != -1 );
}
inline bool exists_test3 (const std::string& name) {
struct stat buffer;
return (stat (name.c_str(), &buffer) == 0);
}
100,000コールの実行にかかる総時間を5回で平均した結果。
<テーブル
メソッド
時間
exists_test0
(ifstream)
0.485s
exists_test1
(FILE fopen)
0.302s
exists_test2
(posix access())
0.202s
exists_test3
(posix stat())
0.134s
は
stat()
関数は、私のシステム(Linux、コンパイル時に
g++
) で、標準の
fopen
の呼び出しは、何らかの理由でPOSIX関数を使うことを拒否している場合、最善の方法です。
関連
-
[解決済み】Visual Studio 2013および2015でC++コンパイラーエラーC2280「削除された関数を参照しようとした」が発生する
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み] Pythonでファイルサイズを確認するには?
-
[解決済み] ファイルが使用中であるかどうかを確認する方法はありますか?
-
[解決済み] Goでファイルが存在するかどうかを確認する方法は?
-
[解決済み] C言語でファイルが存在するかどうかを確認する最も良い方法は何ですか?
-
[解決済み] パスがファイルかディレクトリかを確認する良い方法?
-
[解決済み] Javaでファイルをコピーする標準的な簡潔な方法?
-
[解決済み】<input type="file">でファイル形式を制限する?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み] C言語でファイルが存在するかどうかを確認する最も良い方法は何ですか?