Une option serait de faire System.IO.Directory.GetParent () plusieurs fois. Existe-t-il un moyen plus élégant de parcourir quelques dossiers à partir de l'endroit où se trouve l'assembly en cours d'exécution?
Ce que j'essaie de faire, c'est de trouver un fichier texte qui réside dans un dossier au-dessus du dossier d'application. Mais l'assemblage lui-même est à l'intérieur du bac, qui se trouve à quelques dossiers au fond du dossier de l'application.
c#
.net
console-application
développeur747
la source
la source
Directory.SetCurrentDirectory(@"..\..\..\..");
Réponses:
Une autre manière simple est de faire ceci:
Remarque Cela monte de deux niveaux. Le résultat serait:
newPath = @"C:\Folder1\Folder2\";
la source
Path.Combine
lorsque vous ajoutez de toute façon une barre oblique inverse manuellement. Pensez à utiliser à laPath.Combine(path, "..", "..")
place.si c: \ folder1 \ folder2 \ folder3 \ bin est le chemin, le code suivant renverra le chemin du dossier de base du dossier bin
c'est-à-dire c: \ dossier1 \ dossier2 \ dossier3
si vous voulez le chemin du dossier2, vous pouvez obtenir le répertoire par
alors vous obtiendrez le chemin comme c: \ dossier1 \ dossier2 \
la source
Vous pouvez utiliser
..\path
pour monter d'un niveau,..\..\path
pour monter de deux niveaux à partir du chemin.Vous pouvez également utiliser la
Path
classe.Classe C # Path
la source
C'est ce qui a le mieux fonctionné pour moi:
string parentOfStartupPath = Path.GetFullPath(Path.Combine(Application.StartupPath, @"../"));
Obtenir le "bon" chemin n'était pas le problème, ajouter "../" le fait évidemment, mais après cela, la chaîne donnée n'est plus utilisable, car elle ajoutera simplement le "../" à la fin. L'entourer
Path.GetFullPath()
vous donnera le chemin absolu, le rendant utilisable.la source
La méthode suivante recherche un fichier commençant par le chemin de démarrage de l'application (dossier * .exe). Si le fichier n'y est pas trouvé, les dossiers parents sont recherchés jusqu'à ce que le fichier soit trouvé ou que le dossier racine soit atteint.
null
est renvoyé si le fichier n'a pas été trouvé.Remarque:
Application.StartupPath
est généralement utilisé dans les applications WinForms, mais il fonctionne également dans les applications console; cependant, vous devrez définir une référence à l'System.Windows.Forms
assemblage. Vous pouvez remplacerApplication.StartupPath
parPath.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
si vous préférez.la source
Peut-être pourriez-vous utiliser une fonction si vous souhaitez déclarer le nombre de niveaux et le mettre dans une fonction?
Et vous pourriez l'appeler comme ceci:
la source
C #
la source
cela peut aider
la source
J'ai des répertoires virtuels et je ne peux pas utiliser les méthodes de répertoire. J'ai donc créé une simple fonction de fractionnement / jointure pour les personnes intéressées. Pas aussi sûr cependant.
Donc, si vous voulez déplacer 4 vers le haut, il vous suffit de changer le
1
en4
et d'ajouter quelques vérifications pour éviter les exceptions.la source
Si vous connaissez le dossier dans lequel vous souhaitez naviguer, recherchez-en l'index puis sous-chaîne.
la source
a
, par exemple? Et si le chemin ressemble à ceciC:\Folderame3\Folderame2\Folderame\...
?