12 votes

Résolution des chemins relatifs avec des caractères génériques en C#

En C#, si je dispose d'un chemin d'accès à un répertoire et d'un chemin d'accès relatif à un fichier avec un caractère générique, par ex.

"c:\foo\bar" y "..\blah\*.cpp"

Existe-t-il un moyen simple d'obtenir la liste des chemins d'accès absolus aux fichiers ? par exemple

{ "c:\foo\blah\a.cpp", "c:\foo\blah\b.cpp" }

Contexte

Il y a un arbre de code source, où chaque répertoire peut contenir un fichier de définition de construction. Ce fichier utilise des chemins relatifs avec des jokers pour spécifier une liste de fichiers sources. La tâche consiste à générer une liste de chemins absolus de tous les fichiers sources pour chacun de ces fichiers de définition de construction.

4voto

Stephan Bauer Points 3827

Vous pouvez d'abord obtenir le chemin absolu, puis énumérer les fichiers à l'intérieur du répertoire correspondant au caractère générique :

// input
string rootDir = @"c:\foo\bar"; 
string originalPattern = @"..\blah\*.cpp";

// Get directory and file parts of complete relative pattern
string pattern = Path.GetFileName (originalPattern); 
string relDir = originalPattern.Substring ( 0, originalPattern.Length - pattern.Length );
// Get absolute path (root+relative)
string absPath = Path.GetFullPath ( Path.Combine ( rootDir ,relDir ) );

// Search files mathing the pattern
string[] files = Directory.GetFiles ( absPath, pattern, SearchOption.TopDirectoryOnly );

3voto

Greg Harris Points 114

C'est simple.

using System.IO;
      .
      .
      .
string[] files = Directory.GetFiles(@"c:\", "*.txt", SearchOption.TopDirectoryOnly);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X