2009-09-09 6 views
6

Je pense que cette question peut être triviale pour la plupart d'entre vous mais de toute façon je ne trouve pas la réponse ... donc, j'ai une solution Visual Studio 2008 Solution et une barre de projet dans cette solution. Dans mon bar-projet j'ai un répertoire appelé baz, il ressemble à ceci:C# fichier d'ouverture dans une solution

foo dir 
| 
+-> bar dir 
     | 
     +-> baz dir 
      | 
      +-> asd file 

maintenant je veux ouvrir mon fichier « asd » dans la barre-projet, mais ont besoin le chemin exact de « fichier asd » , comment puis-je le trouver? J'ai essayé simplement "baz \ asd" mais ça ne marche pas.

Merci!

J

Répondre

2

Si vous voulez dire ouvert à l'exécution, le programme fonctionne réellement dans la barre \ bin \ debug (ou barre \ bin \ release), de sorte que vous devez tenir compte pour cela.

En général, je vais faire quelque chose comme:

#if DEBUG 
filename = @"..\..\baz\asd"; 
#else 
filename = @"baz\asd"; 
#endif 
+0

Cela ne fonctionnera pas en dehors de Visual Studio si le fichier n'est pas copié dans le répertoire de sortie. – user7116

+0

Pour le mode édition, mon programme d'installation copie tous les fichiers dont le programme a besoin. Je n'utilise pas le programme d'installation intégré (j'utilise NSIS). Est-ce que celui-ci exige que le fichier soit marqué comme contenu pour qu'il soit ramassé? –

+0

Oui, le programme d'installation a besoin de contenu et d'être copié. – user7116

9

Vous voulez ouvrir le fichier dans bar -projet lors de l'exécution dans une application C#? Il y a plusieurs façons d'accomplir cela, et je vais vous donner le plus facile.

  1. Aller aux Propriétés pour asd dans Explorateur de solutions
  2. Set Build Action à Content
  3. Set Copie vers le répertoire de sortie comme Copy always (ou Copy if newer)

Vous pouvez t poule référence le fichier comme suit dans votre C# (en supposant que votre programme ne change pas le répertoire de travail courant loin de la Executable Répertoire):

using (StreamReader reader = new StreamReader(@"baz\asd")) 
{ 
    // ... 
} 

Les autres moyens impliquent using embedded resources, ce qui est le plus succinct des solutions .

+0

Copier ce type de fichier dans le répertoire de sortie vous laisse avec deux copies sur le disque. C'est bien si les fichiers sont petits et peu nombreux. –

+1

Je suis d'accord, mais c'est le plus facile. Quoi qu'il en soit, l'intégration de la ressource au lieu de la laisser sur le disque prend toujours de la place. – user7116

+1

Je ne copie pas ou n'insère pas pendant le débogage, il suffit de laisser les fichiers où ils sont. Pour les versions de versions, mon installateur (j'utilise NSIS) est responsable de l'installation des fichiers requis sur la machine cible. –

2

L'emplacement relatif du fichier correspond au répertoire de la solution. Donc, pour l'ouvrir dans l'IDE VS, vous pouvez taper dans la fenêtre de commande ou la zone de texte Rechercher dans la barre d'outils standard (Ctrl-D):

>open bar\baz\asd 

Si vous voulez le faire lors de l'exécution, vous devez distribuez les fichiers source avec votre application, car rien ne garantit que l'application sera exécutée à proximité de l'arborescence de la solution. Si vous voulez le faire à partir d'un complément VS, je suis sûr qu'il existe une classe représentant la solution, que vous pouvez utiliser pour énumérer les projets qui s'y trouvent, puis énumérer les entrées de fichier dans le projet de barre.

0

Il peut être préférable d'ajouter une cible simple dans le fichier de construction (fichier de projet - csproj pour C#).Ouvrir le fichier de csproj en mode texte et ajouter:


< Nom target = "AfterBuild" > < Copie SourceFiles = "<SourceFileLocationRelativeToPrjFile> \ <SourceFileName> "DestinationFiles =" <SourceFileName>" />
</Target MS Build prendra soin de copier votre fichier au bon endroit - c'est le bon dossier, peu importe ce que votre configuration (Debug/Release) est.

Si vous vous intéressez également à la publication, vous devrez faire un effort supplémentaire, mais je suppose que vous ne demandez pas cela maintenant - donc, cela restera simple.

Questions connexes