2010-12-05 39 views
0

J'ai une méthode de classe (implémentée dans un objet partagé dans l'environnement UNIX) qui doit accéder à un fichier de données de texte en cours d'exécution (en utilisant ifstream). Actuellement, la méthode suppose que le fichier de données est disponible pour l'ouverture sans chemin relatif, soit quelque chose commeComment activer un objet partagé accédant à un fichier de données en exécution (UNIX)

ifstream dataFile("data.txt"); 

L'objet partagé est chargé à partir du code python, et pour qu'elle soit disponible pour le chargement, il est copié dans le dossier \usr\lib\ en tant qu'étape post-construction du fichier makefile. Ma question est de savoir comment rendre le fichier de données texte disponible pour l'objet partagé. Je l'ai examiné les possibilités suivantes:

  • Utilisez une chemin relatif, mais cette méthode est pas totalement infaillible (le projet est hébergé sur divers cas et je ne peux pas être sûr que l'arborescence restera le même (par exemple) un mois à partir de maintenant).
  • copier le fichier de données ainsi à \usr\lib, mais je pense que c'est une mauvaise attitude.

Toutes les suggestions sont les bienvenues.

+0

Le fichier de données devrait-il être modifié? –

+0

@Ignacio Vazquez-Abrams: Oui, pensez-y comme un fichier de contenu qui permet certaines modifications de configuration sans avoir besoin de recompiler. –

Répondre

2

La bonne façon d'y parvenir est de faire de l'emplacement du fichier texte une valeur configurable qui sera définie lors de l'installation de votre projet. L'utilisation d'un fichier de configuration dans/etc/est un moyen courant de stocker cette valeur.

De cette façon, vous pouvez placer le fichier texte par ex./usr/share/avec tous les fichiers indépendants de la machine (ce fichier de données est indépendant de la machine, n'est-ce pas?) et votre code "sait" où le trouver. Notez que si le fichier de données va être modifié dans le cadre de l'opération de votre code, il devrait probablement être placé quelque part sous/var (/ var/lib ou peut-être/var/cache) selon la norme de hiérarchie du système de fichiers (FHS) et la plupart des autres normes de système de fichiers Unix. Si le fichier de données peut être considéré comme un fichier de configuration, comme vous l'avez mentionné dans l'un de vos commentaires, vous pouvez simplement coder en dur son chemin vers/etc/(par exemple /etc/MyProject/data.cfg) et continue.

+0

Oui, il est indépendant de la machine. Merci! –

0

Je peux penser à deux solutions:

  • Lorsque vous chargez votre objet partagé, vous donner une certaine façon, il le chemin de votre fichier. Au lieu de copier le fichier dans/usr/lib, vous pouvez créer un lien symbolique dans/usr/lib mais ce n'est pas la meilleure chose à faire.

La première solution est la meilleure pour moi.