comment changer le répertoire de travail de l'emplacement du programme
Je veux utiliser c++ pour ouvrir un fichier sur Mac OS.
Si je lance le programme, sous Xcode, le répertoire de travail est la même chose avec le programme, ce qui est bien. Cependant, si j'essaie d'exécuter le programme dans le terminal, le répertoire de travail est toujours "Utilisateurs/nom d'utilisateur". Savez-vous comment changer le répertoire de travail de l'emplacement de ce programme?
Voici un exemple de code:
#include <iostream>
#include <fstream>
using namespace std;
int main (int argc, const char * argv[])
{
char * dir = getcwd(NULL, 0);
cout << "Current dir: " << dir << endl;
ifstream fin("hi.txt");
if (fin.is_open()) cout << "File is Open" << endl;
else cout << "File is not open" << endl;
fin.close();
return 0;
}
Pourquoi voulez-vous que le programme de l'utilisation de son propre répertoire d'installation que le répertoire courant? Il ne sera probablement pas en mesure d'y écrire (si le logiciel est installé correctement). Il pourrait être en mesure de lire les fichiers un peu plus facilement, mais c'est contestable mérite. Otoh, que, si je lance le programme à partir de
J'ai juste envie de mettre tous les fichiers ensemble. J'ai l'habitude d'utiliser windows beaucoup. Et quand je lance un programme en ligne de commande sous windows, le fichier généré par le programme est censé être dans le même emplacement du programme. Je reçois votre point de vue. Je vais y réfléchir. Merci beaucoup.
Rappelez-vous que Windows n'est pas principalement un système multi-utilisateur, et il n'y a pas une manière analogue à la Unix répertoire personnel de chaque utilisateur. Cela mène des programmes de l'éparpillement des données de tous sur la place. Sur les systèmes Unix, stockage de données quelque part sous $HOME est recommandé. Par exemple, les informations de configuration peut être dans un fichier (ou un répertoire)
Je vais avoir un problème similaire ici et ne peut pas fixer sur la base de cette solution. Je suis désespérée d'une solution et permettra de compenser avec une certaine réputation. stackoverflow.com/questions/40920783/...
Offre également une prime à celui qui peut m'aider à la réparer.
$HOME/src/subdir/myprogram
, je m'attends à spécifier les noms de fichiers relatifs à l'annuaire j'ai commencé à partir, non pas par rapport à /Applications/Doohickey.app/Contents/MacOS
ou $HOME
ou quelque chose de similaire. Bien sûr, cela dépend de ce que fait le programme...mais être prudent sur l'utilisation de chdir()
.J'ai juste envie de mettre tous les fichiers ensemble. J'ai l'habitude d'utiliser windows beaucoup. Et quand je lance un programme en ligne de commande sous windows, le fichier généré par le programme est censé être dans le même emplacement du programme. Je reçois votre point de vue. Je vais y réfléchir. Merci beaucoup.
Rappelez-vous que Windows n'est pas principalement un système multi-utilisateur, et il n'y a pas une manière analogue à la Unix répertoire personnel de chaque utilisateur. Cela mène des programmes de l'éparpillement des données de tous sur la place. Sur les systèmes Unix, stockage de données quelque part sous $HOME est recommandé. Par exemple, les informations de configuration peut être dans un fichier (ou un répertoire)
$HOME/.yourapp
. Regardez la Pomme "OS X Human Interface Guidelines" pour où trouver des trucs sur Mac OS X.Je vais avoir un problème similaire ici et ne peut pas fixer sur la base de cette solution. Je suis désespérée d'une solution et permettra de compenser avec une certaine réputation. stackoverflow.com/questions/40920783/...
Offre également une prime à celui qui peut m'aider à la réparer.
OriginalL'auteur Yuchen Zhong | 2012-11-05
Vous devez vous connecter pour publier un commentaire.
Utiliser la valeur
$(PROJECT_DIR)
dans le répertoire de travail dans votre système les paramètres de débogage:Je vais avoir un problème similaire ici et ne peut pas fixer sur la base de cette solution. Je suis désespérée d'une solution et permettra de compenser avec une certaine réputation. stackoverflow.com/questions/40920783/...
Je vais aussi en offrant une prime à celui qui peut m'aider à la réparer.
OriginalL'auteur Matt Connolly
Vous pouvez personnaliser le répertoire de travail de votre projet dans Xcode. Dans Xcode 4 choisissez Modifier le Schéma du Schéma de menu dans la fenêtre de projet de la barre d'outils pour ouvrir l'éditeur de schéma. Sélectionnez l'Exécuter pas à pas dans le côté gauche de l'éditeur de projet. Cliquez sur le bouton Options en haut de l'éditeur de schéma. Sélectionnez l'Utilisation personnalisée répertoire de travail de case à cocher. Cliquez sur le bouton sur le côté droit du champ de texte pour choisir le répertoire de travail.
OriginalL'auteur Mark Szymczyk
Vous pouvez utiliser chdir(), voir ici: Changer le répertoire de travail courant en C++.
Ou si vous pouvez toujours juste émettre un appel système (stdlib.h): http://www.cplusplus.com/reference/clibrary/cstdlib/system/. Ce ne sera pas portable, mais il pourrait être assez bon pour ce que vous avez besoin.
argv[0]
contient toujours le chemin et le nom du programme, bien sûr)En s'appuyant sur argv[0] peut-être pas une bonne idée, il n'y a pas de standard en disant qu'il doit toujours y avoir un chemin d'accès complet, il peut être juste la première partie de la commande qui a commencé. La Solution est d'utiliser
GetModuleFileName(...)
oureadlink( "/proc/self/exe", ...)
OriginalL'auteur llakais