problème d’ouverture du fichier c ++

Doit être une réponse simple mais je suis perdue, voici le code qui renvoie une erreur. J’ai essayé avec et sans la barre oblique de départ.

Je ne saurai pas le chemin complet, je veux qu’il soit relatif à l’exe, et c’est le chemin relatif. J’ai essayé d’échapper aux barres obliques.

Mon problème est que je reçois “erreur d’ouverture de fichier” quand le fichier est là. pourquoi est-ce échouer?

ifstream myFile("/LOGS/ex090716.txt"); if (myFile.fail()) {cout << "Error opening file";} else { cout << "File opened... \n"; //string line; //while( getline(myFile, line) ) { // cmatch results; // regex rx("(p|q)(=)([^ %]*)"); // regex_search(line.c_str(), results, rx); // string referringWords = results[3]; //} myFile.close(); } 

Je vous remercie

Quel est ton problème exactement?! si vous voulez vérifier si le fichier est ouvert ou non, utilisez is_open() .

échouer()

Vérifiez si failbit ou badbit est défini.

La fonction renvoie true si le failbit ou le badbit est défini. Au moins un de ces indicateurs est défini lorsqu’une erreur autre qu’atteindre le fichier de fin de fichier se produit pendant une opération d’entrée.

 ifstream myFile("/LOGS/ex090716.txt"); if (!myFile.fail()){cout << "Error opening file";} else { cout << "File opened... \n"; } myFile.close(); 

OU

 ifstream myFile("/LOGS/ex090716.txt"); if (!myFile){cout << "Error opening file";} else { cout << "File opened... \n"; } myFile.close(); 

Débarrassez-vous de la barre oblique

 ifstream myFile("LOGS/ex090716.txt"); //... 

Chemin relatif: ne commencez pas par /

Relatif au répertoire programme plutôt qu’à cd: vous ne pouvez pas utiliser simplement argv [0] si le programme est trouvé via PATH. Je ne sais pas ce que vous pouvez faire qui soit portable. Vous voudrez peut-être résoudre les liens symboliques à plusieurs resockets.

Sur linux, readlink () sur le fichier / proc / self / exe fonctionne.

Sous Windows, cela est supposé fonctionner:

 TCHAR path[2048] = {0}; GetModuleFileName( NULL, path, 2048 ); const ssortingng exe_path( path ); const ssortingng exe_dir( exe_path.substr(0, exe_path.rfind("\\") + 1 ); 

En général, vous devriez utiliser http://www.boost.org/doc/libs/1_40_0/libs/filesystem/doc/index.htm

perror () peut relativement facilement vous donner une description détaillée du problème

 int fd = open("/LOGS/ex090716.txt", O_RDONLY); if(fd == -1) { perror("cannot open file"); exit(1); } 

Cependant, ce n’est pas c ++ ‘ish.