Chemins relatifs dans Visual Studio
Je travaille dans Visual Studio 2005 et ont ajouté un fichier texte qui doit être analysée en cliquant-droit sur le projet dans l'explorateur de solutions et d'ajouter --> un nouvel élément. Cette place la .fichier txt dans le dossier du projet. Le débogage .exe se trouve dans le dossier /bin/debug dossier.
Comment pointer vers le fichier txt à partir du code à l'aide de chemins d'accès relatifs qui permettra de résoudre correctement les deux dossiers, tout en la résolution d'être dans le même dossier après la solution est-elle publiée?
source d'informationauteur caschw
Vous devez vous connecter pour publier un commentaire.
Découvrez la La Classe D'Application. Il a plusieurs membres qui peut être utilisé pour localiser les fichiers, etc. par rapport à l'application une fois qu'il est installé.
Par exemple, de l'Application.ExecutablePath vous indique où l'EXE en cours d'exécution se trouve le fichier; vous pouvez ensuite utiliser un chemin relatif pour trouver le fichier, par exemple ..\..\FileToBeParsed.txt. Toutefois, cela suppose que les fichiers sont déployées dans la même structure de dossier que le dossier du projet de la structure, ce qui n'est généralement pas le cas.
Considérer les propriétés comme CommonAppDataPath et LocalUserAppDataPath pour localiser des fichiers une fois qu'un projet a été déployé.
Si je comprends votre question correctement: Sélectionnez le fichier dans la "Solution Explorer". En vertu des propriétés - > Copie vers le Répertoire de Sortie, sélectionnez "Copy" ou "Copier si plus Récent". Pour construire une action, sélectionnez "Contenu". Cela va copier le fichier dans le /bin/debug dossier sur construire. Vous devriez être en mesure de référence à partir de la racine du projet.
Une alternative à la localisation d'un fichier sur le disque serait d'inclure le fichier directement dans l'assembly compilé en tant que ressource incorporée. Pour ce faire, cliquez-droit sur le fichier et choisissez "Ressource Incorporée", comme l'action de construire. Vous pouvez ensuite récupérer le fichier comme un flux d'octets:
Plus d'informations sur les ressources incorporées peuvent être trouvés ici et ici.
Si vous êtes à la construction d'une application pour votre propre usage, David Krep la suggestion est le meilleur: il suffit de copier le fichier dans le répertoire de sortie. Si vous êtes à la construction d'une assemblée qui sera réutilisé ou distribué, puis la ressource incorporée option est préférable, car il sera forfait tout en un seul .dll.
Je voudrais ajouter un post étape de génération qui copie le fichier txt dans la configuration active du dossier de sortie:
Il y a quelques macros définies comme "
$(ConfigurationName)"
$(ProjectDir)
L'Application.ExecutablePath solution ne fonctionne pas pour unittests. Le chemin de vstesthost.exe sera retourné
Système.De la réflexion.De l'assemblée.GetExecutingAssembly().Emplacement de travail, mais donne le chemin d'accès avec la assemblyname inclus.
Donc cela fonctionne:
System.Reflection.Assembly.GetExecutingAssembly().Location + "\..\" + "fileToRead.txt"
Mais juste :
Fonctionne aussi. Semble répertoire de travail est l'organe d'exécution de l'assemblée répertoire par défaut.
Vous pouvez ajouter un événement post-build pour copier le .fichier txt à la construction du dossier de sortie. Ensuite, votre code peut supposer que le fichier est dans le même dossier que l'exécutable.
Allez à Propriétés de Projet -> Propriétés de Configuration -> Débogage
Ensemble "Répertoire de Travail" $(TargetDir)
Ensuite, vous pouvez référencer correctement votre fichier en utilisant un chemin relatif dans votre code (par exemple,".... \foo.xml")