Qt-ファイル、フォルダが存在するかどうかを正しく判断する方法
3518 ワード
Qt-ファイル、フォルダが存在するかどうかを正しく判断する方法
ずっとQtのisFile、isDir、existsのこのいくつの方法に対して混乱を感じて、いったいどれを使うか分からないで、ネット上で資料を探して、このいくつの方法を使います
しかし、それを深く研究していないので、テストで問題があることがわかりました.まず、次のテストコードを見てみましょう.
混乱を感じやすいのがexists法であり,この方法は汎用的な判断方法であり,このような表現と見なすことができる.
exists() == (isFile() || isDir())
これも私が説明したい問題で、ネット上のいくつかの博文の中で提出した判断ファイルやフォルダはexistsの方法で厳密ではありません.例えば、あなたの本意はファイルが存在するかどうかを判断することですが、ファイルは存在しません.ちょうど同名のフォルダがあれば、existsもtrueに戻ります.フォルダも同じです
上のコードに基づいてまとめました
ファイルが存在するかどうかを正確に判断する
1.QFileInfo::isFile()メソッド
フォルダが存在するか否かを正確に判断する.QFileInfo::isDir()メソッド2.QDIR::exists()メソッドを使用
文字列がファイルであるかフォルダパスであるかは不明です.QFileInfo::exists()メソッド2.QFile::exists()メソッドを使用
ずっとQtのisFile、isDir、existsのこのいくつの方法に対して混乱を感じて、いったいどれを使うか分からないで、ネット上で資料を探して、このいくつの方法を使います
しかし、それを深く研究していないので、テストで問題があることがわかりました.まず、次のテストコードを見てみましょう.
{
QFileInfo fi("C:/123"); //
qDebug() << fi.isFile(); // false
qDebug() << fi.isDir(); // true
qDebug() << fi.exists(); // true
qDebug() << fi.isRoot(); // false
qDebug() << QFile::exists("C:/123"); // true
qDebug() << QDir("C:/123").exists(); // true
fi.setFile("C:/ABC"); //
qDebug() << fi.isFile(); // false
qDebug() << fi.isDir(); // false
qDebug() << fi.exists(); // false
qDebug() << fi.isRoot(); // false
qDebug() << QFile::exists("C:/ABC"); // false
qDebug() << QDir("C:/ABC").exists(); // false
fi.setFile("C:/"); //
qDebug() << fi.isFile(); // false
qDebug() << fi.isDir(); // true
qDebug() << fi.exists(); // true
qDebug() << fi.isRoot(); // true
qDebug() << QFile::exists("C:/"); // true
qDebug() << QDir("C:/").exists(); // true
fi.setFile("Z:/"); //
qDebug() << fi.isFile(); // false
qDebug() << fi.isDir(); // false
qDebug() << fi.exists(); // false
qDebug() << fi.isRoot(); // false
qDebug() << QFile::exists("Z:/"); // false
qDebug() << QDir("Z:/").exists(); // false
fi.setFile("C:/123.lnk"); //
qDebug() << fi.isFile(); // true
qDebug() << fi.isDir(); // false
qDebug() << fi.exists(); // true
qDebug() << fi.isRoot(); // false
qDebug() << QFile::exists("C:/123.lnk"); // true
qDebug() << QDir("C:/123.lnk").exists(); // false
fi.setFile("C:/456.lnk"); //
qDebug() << fi.isFile(); // false
qDebug() << fi.isDir(); // false
qDebug() << fi.exists(); // false
qDebug() << fi.isRoot(); // false
qDebug() << QFile::exists("C:/456.lnk"); // false
qDebug() << QDir("C:/456.lnk").exists(); // false
}
混乱を感じやすいのがexists法であり,この方法は汎用的な判断方法であり,このような表現と見なすことができる.
exists() == (isFile() || isDir())
これも私が説明したい問題で、ネット上のいくつかの博文の中で提出した判断ファイルやフォルダはexistsの方法で厳密ではありません.例えば、あなたの本意はファイルが存在するかどうかを判断することですが、ファイルは存在しません.ちょうど同名のフォルダがあれば、existsもtrueに戻ります.フォルダも同じです
上のコードに基づいてまとめました
ファイルが存在するかどうかを正確に判断する
1.QFileInfo::isFile()メソッド
フォルダが存在するか否かを正確に判断する.QFileInfo::isDir()メソッド2.QDIR::exists()メソッドを使用
文字列がファイルであるかフォルダパスであるかは不明です.QFileInfo::exists()メソッド2.QFile::exists()メソッドを使用