C++ ifstream sur XCode: Où est le répertoire par défaut?
Ok, donc c'est la première fois que j'ai codé en C++ dans Xcode (je suis habitué à ObjC)et j'ai commencé un cours de programmation à mon collège.
J'essaie d'ouvrir un fichier (soit codé en dur ou à partir de la saisie de l'utilisateur dans la console), et peu importe ce que j'essaie, il dit que le fichier ne s'ouvre pas (par le biais de la vérification des erreurs)
Je suppose que c'est parce que l'test.txt le fichier que j'ai n'est pas dans l'hypothèse d'un répertoire racine, si c'est le cas, quel est le répertoire racine?
Voici mon code pour l'instant:
//include files
#include <iostream>
#include <stdio.h>
#include <fstream>
using namespace std;
//Global Variables
short inputPicture[512][512];
short outputPicture[512][512];
//Function Prototypes
void getInput(char* in, char* out);
void initializeArray(ifstream* input);
//Main
int main(){
//local variables
char inputFile[32];
char outputFile[32];
ifstream input;
ofstream output;
getInput(inputFile, outputFile);
cout << inputFile << endl;//test what was sent back from the function
input.open(inputFile, ifstream::in);
if (!input.is_open()){//check to see if the file exists
cout << "File not found!\n";
return 1;//if not found, end program
}
initializeArray(&input);
return 0;
}//end Main
//Gets initial input from user
void getInput(char* in, char* out){
cout << "Please designate input file: ";
cin >> in;
cout << "\nPlease designate an output file: ";
cin >> out;
}//end getInput
//Sets the global array to the information on the input file
void initializeArray(ifstream* input){
}//end initializeArray
S'il vous plaît laissez-moi savoir si il ya quelque chose de mal, je suis en train de faire, je suis sûr que c'est toujours une grande possibilité 🙂
Vous devez vous connecter pour publier un commentaire.
Le répertoire par défaut doit être relatif à l'application du répertoire de travail, ce qui est généralement le lieu même de la demande est situé (débogueurs peut mess avec qui, parfois).
Pour des tests simples, il suffit de spécifier un chemin absolu dans la ligne de commande (ou le code).
Pour obtenir le répertoire courant (à voir), le
getcwd()
fonction C (également utilisable en C++) vont vous aider. Quelque chose comme:Qui doit l'afficher dans la console. Le
getcwd
fonction a quelques variations en fonction de ce que vous fonctionner sur, je n'ai pas testé sur Mac, mais d'info ici:http://linux.die.net/man/3/getcwd
#include <unistd.h>
Le répertoire "racine" de votre exécutable est à la recherche pour le fichier n'est pas le réel
/
répertoire racine du système de fichier, mais c'est le répertoire que l'exécutable en cours d'exécution dans ... si vous êtes en utilisant Xcode, cela peut être enterrés à l'intérieur de l'un des répertoires de construction créé automatiquement par Xcode pour votre projet plutôt que d'un accueil de l'utilisateur dossier ou le dossier d'accueil de la sous-répertoire comme/Users/XXXXXX/Documents
.view package contents
. À l'intérieur, il y aura unMacOSX
répertoire, et à l'intérieur de ce répertoire, il y aura unbin
répertoire. Votre exécutable doit être à l'intérieur. Sinon, si c'est une simple ligne de commande de l'application, puis Xcode devrait avoir par défaut un répertoire de construction, qu'il utilise pour créer votre binaires compilés dans.Le "répertoire par défaut" est le répertoire à partir duquel le fichier exécutable a été exécuté. Habituellement, c'est dans le même dossier que l'exécutable, bien que si vous faites des choses comme le glisser-déposer des fichiers sur un fichier exe, il peut changer le chemin de démarrage.
Le chemin d'accès peut également modifier si vous exécutez le programme à partir de l'intérieur de votre IDE. L'IDE lance l'exécutable, il est donc impossible de vous dire où c'est de le faire. Vous aurez à trouver où il stocke les fichiers exécutables et de mettre le fichier en y, ou utiliser un chemin absolu.
Dans Xcode (v7.1.1 au moment de la rédaction) barre latérale, il est généré automatiquement le dossier appelé "Produits". À l'intérieur, vous trouverez le fichier exécutable de votre projet (en supposant que vous avez construit votre projet au moins une fois). Cliquez-droit sur elle & choisissez "Afficher dans le Finder". Un dossier va s'ouvrir dans le Finder. C'est le répertoire de travail de votre programme, & vous remarquerez qu'il n'est pas réellement à l'intérieur de votre projet du dossier.
Vous pouvez avoir Xcode utiliser un autre répertoire. Dans la barre d'outils, sur le côté gauche où il montre le nom de votre projet à côté de l'actif construire l'architecture, cliquez sur le nom du Projet > Modifier le Régime...
Alors cherchez une option appelée "Répertoire de Travail" dans le dialogue qui apparaît. Cochez la case & ensuite choisissez un répertoire personnalisé. Note: assurez-vous que l'option "Run" est sélectionné dans la feuille de la sidebar.
Dans mon cas,
- getcwd(NULL, 0) retourné "/".
- et je ne pouvais pas utiliser abusolute chemin.(Il change à chaque terminal déployé).
Ai donc pris le chemin d'accès par ObjC code et de le jeter à la fonction c++.
1.Mettre les fichiers dans le répertoire de projet xcode. Et vérifier qu'ils sont inclus dans les "Cibles"->"Phases de construction"->"Copie Bundle de Ressources".
2.Obtenir le chemin d'accès par ObjC code.
3.Et de le jeter à la fonction c++.
4.Ensuite, vous pouvez faire un ablsolute chemin de fichier en c++.
Il a travaillé pour moi.