2016-12-06 3 views
2

J'écris actuellement un projet dans visual studio en C#. le projet chemin complet est:Obtenir le chemin relatif d'un fichier C#

"C:\TFS\MySolution\" 

J'ai un fichier que je dois charger pendant l'exécution. Disons que le chemin du fichier est

"C:\TFS\MySolution\Project1\NeedtoLoad.xml" 

Je ne veux pas écrire le chemin complet codé en dur, et que vous voulez obtenir le chemin d'une manière dynamique.

J'utilise la ligne suivante:

var path = Directory.GetCurrentDirectory(); 

Le problème que chaque méthode que j'ai trouvé et la ligne de code ci-dessus me met le chemin suivant:

"C:\TFS\MySolution\Project1\bin\Debug" 

Et ce que je dois est

"C:\TFS\MySolution\Project1\" 

donc je pouvais concaténer

NeedtoLoad.xml 

à la réponse.

bien sûr que je pouvais faire:

path.Substring(0, path.IndexOf("bin\\Debug")); 

Mais il est pas élégant. Avant de dire que la question est un doublon Veuillez lire à nouveau la question, car je n'ai rien trouvé de tel.

Répondre

2

Vous pouvez utiliser Directory.GetParent et son Parent membre

string path = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName; 

ira à des niveaux l'arbre de chemin et retour "C:\TFS\MySolution\Project1".

0

Si ce fichier fait partie de votre projet, vous devez vous assurer qu'il est copié dans la sortie de votre projet lors de la construction.

Choisissez le fichier dans l'explorateur de solutions et accédez au volet Propriétés de Visual Studio (F4). Sélectionnez "Contenu" comme "Action de construction". Maintenant, lorsque vous construisez votre solution, le fichier sera copié dans le répertoire de sortie (bin/Debug ou bin/Release).

0

Si le fichier XML est une partie statique de votre projet (vous ne le remplacez pas pendant l'exécution), il est probablement préférable de l'inclure dans votre DLL.

  • Aller au fichier de propriétés et de le rendre Embarqué ressources
  • simplement charger des ressources dll, par exemple

    var asm = Assembly.GetCallingAssembly(); 
    using (var stream = asm.GetManifestResourceStream(resource)) 
    { 
        var reader = new StreamReader(stream); 
        return reader.ReadToEnd(); 
    }