2008-12-06 5 views
4

Si j'ai la structure de répertoire suivant:Concaténation Environment.CurrentDirectory avec chemin de retour

Projet1/bin/debug
Projet2/xml/file.xml

Je suis en train de se référer à File.xml de Projet1/bin/debug répertoire

Je essentiellement en train de faire ce qui suit:

string path = Environment.CurrentDirectory + @"..\..\Project2\xml\File.xml": 

ce qui est correct syntaxe pour cela?

Répondre

9

Il est probablement préférable de manipuler des composants de chemin en tant que composants de chemin, plutôt que des chaînes:

string path = System.IO.Path.Combine(Environment.CurrentDirectory, 
            @"..\..\..\Project2\xml\File.xml"); 
+0

Cela se traduit par .. \ Project1 \ bin \ debug \ .. \ .. \ Project2 \ ... Si vous pensez à ".." en mangeant un répertoire précédent dans le chemin, vous obtenez .. \ Project1 \ Project2 \ ... – tvanfosson

+0

Assez vrai. Je n'ai pas compté les ak's ... je me suis dit que c'était le manque de direction qui les faisait entrer. –

+0

A travaillé pour moi! +1 –

4

Utilisation:

System.IO.Path.GetFullPath(@"..\..\Project2\xml\File.xml") 
2
string path = Path.Combine(Environment.CurrentDirectory, 
          @"..\..\..\Project2\xml\File.xml"); 

One ".." vous emmène à bin

Ensuite, ".." vous amène à Project1

Suivant « .. » vous emmène au parent Projet1

puis vers le bas dans le fichier

+0

En fait, je préfère la version @lubos, mais avec le bon chemin pour le fichier. – tvanfosson

1

S'il vous plaît noter que l'utilisation Path.Combine() pourrait ne pas vous donner le résultat escompté, par exemple:

string path = System.IO.Path.Combine(@"c:\dir1\dir2", 
            @"..\..\Project2\xml\File.xml"); 

Il en résulte dans la chaîne suivante:

@"c:\dir1\dir2\dir3\..\..\Project2\xml\File.xml" 

Si vous attendez le chemin à « c: \ dir1 \ Projet2 \ xml \ File.xml », vous pouvez utiliser une méthode comme celui-ci au lieu o Chemin.Combine():

public static string CombinePaths(string rootPath, string relativePath) 
{ 
    DirectoryInfo dir = new DirectoryInfo(rootPath); 
    while (relativePath.StartsWith("..\\")) 
    { 
     dir = dir.Parent; 
     relativePath = relativePath.Substring(3); 
    } 
    return Path.Combine(dir.FullName, relativePath); 
} 
+0

Mais que diriez-vous de ".. \" pas au début de relativePath? C'est toujours un chemin valide. Je préférerais utiliser System.IO.Path.GetFullPath pour convertir les chemins relatifs en chemins absolus. –

+0

ou en utilisant les classes DirectoryInfo et FileInfo peuvent également être une option. –

Questions connexes