txt manejo lenguaje leer guardar fputs existe ejercicios datos comprobar archivos archivo c++ file file-io

manejo - ¿Cuál es la mejor manera de verificar si existe un archivo en C++?(plataforma cruzada)



manejo de archivos en c pdf (8)

¿Qué tal el access ?

#include <io.h> if (_access(filename, 0) == -1) { // File does not exist }

He leído las respuestas de ¿Cuál es la mejor manera de verificar si existe un archivo en C? (plataforma cruzada) , pero me pregunto si hay una forma mejor de hacerlo utilizando librerías estándar de c ++. Preferiblemente sin intentar abrir el archivo en absoluto.

Tanto la stat como el access son bastante ingociables. ¿Qué debería #include para usar estos?


Otra posibilidad consiste en utilizar la función good() en la secuencia:

#include <fstream> bool checkExistence(const char* filename) { ifstream Infield(filename); return Infield.good(); }


Soy un usuario feliz y seguramente usaré la solución de Andreas. Pero si no tuvo acceso a las bibliotecas de impulso, puede usar la biblioteca de flujo:

ifstream file(argv[1]); if (!file) { // Can''t open file }

No es tan bueno como boost :: filesystem :: existe ya que el archivo realmente se abrirá ... pero eso es generalmente lo siguiente que quieres hacer de todos modos.


Tenga cuidado con las condiciones de carrera: si el archivo desaparece entre la marca "exists" y la hora en que lo abre, su programa fallará inesperadamente.

Es mejor ir y abrir el archivo, verificar el error y si todo está bien, entonces haga algo con el archivo. Es aún más importante con el código de seguridad crítica.

Detalles sobre condiciones de seguridad y carrera: http://www.ibm.com/developerworks/library/l-sprace.html


Use boost::filesystem :

#include <boost/filesystem.hpp> if ( !boost::filesystem::exists( "myfile.txt" ) ) { std::cout << "Can''t find my file!" << std::endl; }


Use stat (), si es lo suficientemente multiplataforma para sus necesidades. Sin embargo, no es estándar en C ++, sino POSIX.

En MS Windows hay _stat, _stat64, _stati64, _wstat, _wstat64, _wstati64.


Volvería a intentar averiguar si existe un archivo. En su lugar, debe tratar de abrirlo (en Estándar C o C ++) en el mismo modo que tiene la intención de usarlo. ¿De qué sirve saber que el archivo existe si, por ejemplo, no puede escribirse cuando lo necesita?


NO SE NECESITA boost , que sería una exageración .

Use stat() (aunque no sea multiplataforma como lo menciona pavon), así:

#include <sys/stat.h> #include <iostream> // true if file exists bool fileExists(const std::string& file) { struct stat buf; return (stat(file.c_str(), &buf) == 0); } int main() { if(!fileExists("test.txt")) { std::cerr << "test.txt doesn''t exist, exiting.../n"; return -1; } return 0; }

Salida:

C02QT2UBFVH6-lm:~ gsamaras$ ls test.txt ls: test.txt: No such file or directory C02QT2UBFVH6-lm:~ gsamaras$ g++ -Wall main.cpp C02QT2UBFVH6-lm:~ gsamaras$ ./a.out test.txt doesn''t exist, exiting...

Otra versión (y eso) se puede encontrar here .