2010-10-25 28 views
4

Je suis passé de Windows à Mac et maintenant je rencontre un problème avec les classes d'entrée/sortie de fichier: ifstream & ofstream.C++: Où la classe ofstream enregistre-t-elle les fichiers?

Dans Windows lorsque vous exécutez avec g ++/blocs de code

ofstream out("output.txt"); 
out << "TEST"; 
out.close(); 

Un nouveau fichier "sortie.txt" sera créé dans le même répertoire .

Cependant, dans MAC OS X, ce fichier est créé dans mon répertoire: /Users/USER_NAME/output.txt

Comment puis-je avoir ce fichier dans le même répertoire en même temps que l'exécutable?

P.S. J'utilise GCC et CodeBlocks. Il n'y a pas de projets - je compile juste un seul fichier source.

+0

Vérifiez les paramètres de codeblock. Il s'agit probablement de définir le répertoire de travail en cours avant de démarrer votre application. –

Répondre

5

Les classes de flux, comme toutes les autres fonctions d'ouverture de dossier, utilisez le répertoire courant lorsque vous fournissez un chemin relatif . Vous pouvez contrôler le répertoire en cours avec une fonction comme chdir, mais une meilleure solution consiste à utiliser des noms de fichiers complets. Ensuite, vous supprimez la dépendance de votre programme sur le répertoire en cours.

+0

Je fais de petits problèmes en C++. J'en ai des douzaines. Et si je spécifie un chemin absolu - les programmes ne fonctionneront pas sous Windows. De plus, si je change le répertoire, ils ne fonctionneront pas non plus. – Alex

+0

@Alex Absolute ne signifie pas constante :-D Vous devez bien sûr générer le chemin absolu à partir de la position actuelle du programme. Utilisez argv [0] pour voir le chemin relatif utilisé pour exécuter le programme. –

+1

@Let_Me_Be, mais Rob a déclaré que "une meilleure solution consiste à utiliser des noms de fichiers pleinement qualifiés" ... Je suis totalement confus. J'ai juste besoin d'accéder aux fichiers du répertoire où se trouve l'exécutable. – Alex

0

Vous devez fournir un chemin complet et absolu vers le fichier que vous essayez de créer.

2

Le fichier est simplement créé dans le répertoire de travail actuel. Changer le répertoire de travail ou fournir le chemin complet.

+0

Comment puis-je changer de répertoire de travail? – Alex

+1

Vous devrez utiliser l'API OS pour cela. Dans POSIX, c'est chdir: http://www.opengroup.org/onlinepubs/009695399/functions/chdir.html –

1

Le répertoire de travail est initialement défini au démarrage de votre programme. Lorsque vous le démarrez à partir de la ligne de commande, vous héritez du répertoire de travail en cours à partir du shell. Dans CodeBlock, l'une des options du projet est le répertoire de travail d'exécution pour les exécutions de débogage.

(Voir aussi http://www.gamedev.net/community/forums/topic.asp?topic_id=571206&whichpage=1�)

+0

Même lorsque je le lance à partir de la ligne de commande, il crée toujours les fichiers texte dans le dossier USER. – Alex