Je travaille sur un projet de devoirs C++ dans Code :: Blocks où le nom du fichier à ouvrir est spécifié dans le premier argument de la ligne de commande. Le fichier que j'essaie d'ouvrir s'appelle InputFile1.txt. Quand je lance le code ci-dessous:C++ Possibilité d'ouvrir un fichier dans Code :: Blocs avec son chemin complet, mais pas avec le chemin relatif en argument de ligne de commande
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <unistd.h>
using std::cout;
using std::ifstream;
using std::ofstream;
using std::cerr;
int main(int argc, char *argv[])
{
ifstream inputFile;
puts(getcwd(0,1234));
inputFile.open(argv[1]);
if (inputFile.is_open())
{
cerr << "Couldn't open file " << argv[1];
return(EXIT_FAILURE);
}
cout << "\nThe file to search is: " << argv[1];
return(EXIT_SUCCESS);
}
Le message d'erreur « Impossible d'ouvrir le fichier InputFile1.txt » est affiché. Cependant lorsque je tape le chemin d'accès complet à InputFile1.txt le fichier s'ouvre avec succès comme indiqué par la sortie du message sur le fond. Les étapes de dépannage suivantes ont été effectuées:
- Ouverture réussie du fichier avec un programme C exécuté sur le même IDE.
- Vérifié que le nom du fichier était correctement orthographié et qu'il s'agissait du premier argument de la ligne de commande; a également ouvert le fichier avec gedit.
- Vérifié le chemin d'accès du fichier de travail actuel par l'instruction puts (getcwd (0,1234)
- Vérifié le répertoire de travail d'exécution du projet Code :: Blocks (Projets> Propriétés> Construire des cibles - Exécution du répertoire de travail:) correspondait à la sortie de l'étape 3 et que InputFile1.txt se trouvait dans le répertoire de travail
- Modification du répertoire de travail dans un répertoire de niveau supérieur et copie du fichier InputFile1.txt dans le répertoire. pas argv [1]
Mon analyse:.
- Je ne pense pas que ce soit des autorisations de fichiers, sinon il ne s'ouvrirait pas dans gedit ou avec le chemin complet.
- Je ne pense pas que ce soit le répertoire de travail d'exécution ou il ne serait pas ouvert pour le programme C exécuté dans Code :: Blocks.
- C'est quelque chose à voir avec mon code C++ ou ma configuration Code :: Blocks.
Toute idée/aide serait grandement appréciée.
Votre IDE n'a probablement pas le même répertoire de travail que votre application et appelle votre application avec un chemin relatif par exemple. 'debug32 \ mon_app.exe'; par conséquent, le chemin relatif à tous les fichiers peut être différent (les chemins relatifs sont relatifs au répertoire de travail et non au répertoire de l'application). Votre application fonctionne-t-elle correctement lorsqu'elle est exécutée à partir de la ligne de commande (en dehors de l'EDI)? Essayez aussi d'imprimer 'argv [0]' pour vérifier comment votre application a été invoquée. –
J'ai oublié de mentionner que pendant mon dépannage j'ai lu un message sur le débordement de pile sur les répertoires Bin & Obj de Code :: Blocks, et j'ai essayé de forcer une solution en déplaçant une copie dans les répertoires respectifs et en ouvrant le fichier. Sans succès. – Crispy
Richard - Merci pour votre aide! Je garderai certainement votre conseil à l'esprit la prochaine fois que j'aurai des problèmes à ouvrir un fichier dans Code :: Blocks. – Crispy