txt leer guardar existe datos comprobar archivo c++ qt file-exists

leer - comprobar si existe un archivo c++



Cómo verificar si el archivo existe en Qt en c++ (6)

¿Cómo puedo verificar si un archivo existe en una ruta determinada o no en Qt?

Mi código actual está abajo:

QFile Fout("/Users/Hans/Desktop/result.txt"); if(!Fout.exists()) { eh.handleError(8); } else { // ...... }

Pero cuando ejecuto el código, no aparece el mensaje de error especificado en handleError aunque el archivo que mencioné en la ruta no existe.


Así es como compruebo si la base de datos existe:

#include <QtSql> #include <QDebug> #include <QSqlDatabase> #include <QSqlError> #include <QFileInfo> QString db_path = "/home/serge/Projects/sqlite/users_admin.db"; QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName(db_path); if (QFileInfo::exists(db_path)) { bool ok = db.open(); if(ok) { qDebug() << "Connected to the Database !"; db.close(); } } else { qDebug() << "Database doesn''t exists !"; }

Con SQLite es difícil verificar si la base de datos existe, porque crea automáticamente una nueva base de datos si no existe.


Creo que será útil también

bool isFileExists(const std::string & filename){ QFileInfo check_file(filename.c_str()); return check_file.exists() && check_file.isFile(); }


El código que has publicado es correcto. Lo más probable es que algo más esté mal.

Intenta poner esto:

qDebug() << "Function is being called.";

dentro de su función handleError. Si se imprime el mensaje anterior, sabrá que otra cosa es el problema.


Me saltaría el uso de cualquier cosa de Qt, y solo usaré el antiguo access estándar:

if (0==access("/Users/Hans/Desktop/result.txt", 0)) // it exists else // it doesn''t exist


Puede usar el QFileInfo::exists() :

#include <QFileInfo> if(QFileInfo("C://exampleFile.txt").exists()){ //The file exists } else{ //The file doesn''t exist }

Si desea que devuelva true solo si el archivo existe y es false si la ruta existe pero es una carpeta, puede combinarla con QDir::exists() :

#include <QFileInfo> #include <QDir> QString path = "C://exampleFile.txt"; if(QFileInfo(path).exists() && !QDir(path).exists()){ //The file exists and is not a folder } else{ //The file doesn''t exist, either the path doesn''t exist or is the path of a folder }


(TL; DR en la parte inferior)

QFileInfo ( docs ): esto es exactamente para lo que está hecho:

La clase QFileInfo proporciona información de archivo independiente del sistema.

QFileInfo proporciona información sobre el nombre y posición (ruta) de un archivo en el sistema de archivos, sus derechos de acceso y si es un directorio o enlace simbólico, etc. También están disponibles el tamaño del archivo y los últimos tiempos de modificación / lectura. QFileInfo también se puede usar para obtener información sobre un recurso de Qt.

Este es el código fuente para verificar si existe un archivo:

#include <QFileInfo>

(no olvide agregar la correspondiente #include -statement)

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; } }

También considere: ¿solo desea verificar si la ruta existe ( exists() ) o desea asegurarse también de que se trata de un archivo y no un directorio ( isFile() )?

Tenga cuidado : la documentación de la función exists() dice:

Devuelve verdadero si el archivo existe; de lo contrario, devuelve falso.

Nota: Si el archivo es un enlace simbólico que apunta a un archivo no existente, se devuelve falso.

Esto no es preciso Debería ser:

Devuelve verdadero si la ruta (es decir, archivo o directorio) existe; de lo contrario, devuelve falso.

TL; DR

(con una versión más corta de la función anterior, guardando algunas líneas de código)

#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(); }

TL; DR para Qt> = 5.2

(el uso exists como una static que se introdujo en Qt 5.2; los documentos dicen que la función estática es más rápida, aunque no estoy seguro de que este sea todavía el caso cuando también se utiliza el método isFile() ; al menos, esto es de una sola línea entonces)

#include <QFileInfo> // check if path exists and if yes: Is it a file and no directory? bool fileExists = QFileInfo::exists(path) && QFileInfo(path).isFile();