(TL;DR は下部にあります)
私はQFileInfo
-class ( docs ) を使用します - これはまさにそれが作成されたものです:
QFileInfo クラスは、システムに依存しないファイル情報を提供します。
QFileInfo は、ファイル システム内のファイルの名前と位置 (パス)、アクセス権、ディレクトリかシンボリック リンクかなどに関する情報を提供します。ファイルのサイズと最終変更/読み取り時間も利用できます。QFileInfo を使用して、Qt リソースに関する情報を取得することもできます。
これは、ファイルが存在するかどうかを確認するソース コードです。
#include <QFileInfo>
(対応するステートメントを追加することを忘れないでください#include
)
bool fileExists(QString path) {
QFileInfo check_file(path);
// check if file exists and if yes: Is it really a file and no directory?
if (check_file.exists() && check_file.isFile()) {
return true;
} else {
return false;
}
}
次の点も考慮してください。パスが存在するかどうかのみを確認したいですか ( exists()
)、それとも、これがディレクトリではなくファイルであることも確認したいですisFile()
か ( )。
注意してくださいexists()
: -functionのドキュメントには次のように書かれています:
ファイルが存在する場合は true を返します。それ以外の場合は false を返します。
注: file が存在しないファイルを指すシンボリック リンクである場合は、false が返されます。
これは正確ではありません。そのはず:
パス (つまり、ファイルまたはディレクトリ) が存在する場合は true を返します。それ以外の場合は false を返します。
TL;DR
(上記の関数の短いバージョンを使用すると、数行のコードを節約できます)
#include <QFileInfo>
bool fileExists(QString path) {
QFileInfo check_file(path);
// check if path exists and if yes: Is it really a file and no directory?
return check_file.exists() && check_file.isFile();
}
Qt >=5.2 の TL;DR
( Qt 5.2 で導入されexists
た asを使用しstatic
ます。ドキュメントでは、静的関数の方が高速であると書かれていますが、メソッドを使用する場合もこれが当てはまるかどうかはわかりませんisFile()
。少なくともこれはワンライナーです)
#include <QFileInfo>
// check if path exists and if yes: Is it a file and no directory?
bool fileExists = QFileInfo::exists(path) && QFileInfo(path).isFile();