2017-03-14 1 views
0

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:

  1. Ouverture réussie du fichier avec un programme C exécuté sur le même IDE.
  2. 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.
  3. Vérifié le chemin d'accès du fichier de travail actuel par l'instruction puts (getcwd (0,1234)
  4. 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
  5. 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.

+0

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. –

+0

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

+0

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

Répondre

0

Il s'avère que le code indiqué ci-dessus fonctionnait correctement. L'instruction if dans le code ci-dessous:

inputFile.open(argv[1]); 
if (inputFile.is_open()) 
{ 
    cerr << "Couldn't open file " << argv[1]; 
    return(EXIT_FAILURE); 
} 

était d'évaluer le résultat de l'expression inputFile.is_open(), qui est revenu vrai lorsque le fichier a été ouvert avec succès. Pour vérifier si le fichier n'a pas été ouvert avec succès, l'expression !inputFile.is_open() aurait dû être utilisée. Merci à mon prof pour m'aider à résoudre ce problème - l'erreur était toute à moi.