Comment naviguer dans quelques dossiers?

Une option serait de faire System.IO.Directory.GetParent () plusieurs fois. Existe-t-il une manière plus élégante de parcourir quelques dossiers depuis l’endroit où se trouve l’exécutable?

Ce que j’essaie de faire est de trouver un fichier texte qui réside dans un dossier au-dessus du dossier de l’application. Mais l’assemblage lui-même est à l’intérieur de la corbeille, qui se trouve dans quelques dossiers du dossier de l’application.

Un autre moyen simple consiste à faire ceci:

 ssortingng path = @"C:\Folder1\Folder2\Folder3\Folder4"; ssortingng newPath = Path.GetFullPath(Path.Combine(path, @"..\..\")); 

Remarque Cela va deux niveaux plus haut. Le résultat serait: newPath = @"C:\Folder1\Folder2\";

si c: \ folder1 \ folder2 \ folder3 \ bin est le chemin, le code suivant renverra le dossier de base du dossier bin

 ssortingng directory=System.IO.Directory.GetParent(Environment.CurrentDirectory).ToSsortingng()); 

c’est-à-dire c: \ folder1 \ folder2 \ folder3

si vous voulez le dossier folder2, vous pouvez obtenir le répertoire par

 ssortingng directory = System.IO.Directory.GetParent(System.IO.Directory.GetParent(Environment.CurrentDirectory).ToSsortingng()).ToSsortingng(); 

alors vous obtiendrez le chemin comme c: \ folder1 \ folder2 \

C’est ce qui a fonctionné le mieux pour moi:

ssortingng parentOfStartupPath = Path.GetFullPath(Path.Combine(Application.StartupPath, @"../"));

Obtenir le bon chemin n’était pas le problème, l’ajout de “../” le fait évidemment, mais après cela, la chaîne donnée n’est plus utilisable, car elle appenda simplement le “../” à la fin. Path.GetFullPath() avec Path.GetFullPath() vous donnera le chemin absolu, le rendant utilisable.

Vous pouvez utiliser ..\path pour monter d’un niveau, ..\..\path pour aller de deux niveaux à partir du path.

Vous pouvez également utiliser la classe Path .

Classe de chemin C #

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 ait été atteint. null est renvoyé si le fichier n’a pas été trouvé.

 public static FileInfo FindApplicationFile(ssortingng fileName) { ssortingng startPath = Path.Combine(Application.StartupPath, fileName); FileInfo file = new FileInfo(startPath); while (!file.Exists) { if (file.Directory.Parent == null) { return null; } DirectoryInfo parentDir = file.Directory.Parent; file = new FileInfo(Path.Combine(parentDir.FullName, file.Name)); } return file; } 

Remarque: Application.StartupPath est généralement utilisé dans les applications WinForms, mais il fonctionne également dans les applications de console. Cependant, vous devrez définir une référence à l’assembly System.Windows.Forms . Vous pouvez remplacer Application.StartupPath par
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) si vous préférez.

cela peut aider

 ssortingng parentOfStartupPath = Path.GetFullPath(Path.Combine(Application.StartupPath, @"../../")) + "Orders.xml"; if (File.Exists(parentOfStartupPath)) { // file found } 

Peut-être pourriez-vous utiliser une fonction si vous voulez déclarer le nombre de niveaux et le mettre dans une fonction?

 private Ssortingng GetParents(Int32 noOfLevels, Ssortingng currentpath) { Ssortingng path = ""; for(int i=0; i< noOfLevels; i++) { path += @"..\"; } path += currentpath; return path; } 

Et vous pourriez l'appeler ainsi:

 Ssortingng path = this.GetParents(4, currentpath); 

Si vous connaissez le dossier dans lequel vous souhaitez naviguer, recherchez l’index puis la sous-chaîne.

  var ind = Directory.GetCurrentDirectory().ToSsortingng().IndexOf("Folderame"); ssortingng productFolder = Directory.GetCurrentDirectory().ToSsortingng().Subssortingng(0, ind);