Comment puis-je obtenir le répertoire à partir du chemin d'accès complet d'un fichier?


527

Quelle est la façon la plus simple d'obtenir le répertoire dans lequel se trouve un fichier? J'utilise ceci pour définir un répertoire de travail.

string filename = @"C:\MyDirectory\MyFile.bat";

Dans cet exemple, je devrais obtenir "C: \ MyDirectory".


3
Cela ne devrait-il pas être un littéral de chaîne? @"C:\MyDirectory\MyFile.bat"
Edgar

3
Quelqu'un veut-il protéger cette question qui a le droit de le faire? 11 réponses similaires avec la dernière de 2017 ..
Boern

Réponses:


838

Si vous avez définitivement un chemin absolu, utilisez Path.GetDirectoryName(path).

Si vous ne pouvez obtenir qu'un nom relatif, utilisez new FileInfo(path).Directory.FullName.

Notez que Pathet se FileInfotrouvent tous les deux dans l'espace de noms System.IO.


1
En effet, mais existe-t-il une méthode appelée GetDirectory? N'est-ce pas GetDirectoryName?
Brandon

1
Vous pouvez simplement utiliser DirectoryName au lieu de Directory.FullPath ne pouvez-vous pas?
Steven Robbins

1
J'étais à l'épreuve contre la réception d'un nom relatif. Je n'avais pas remarqué que le chemin sera absolu. J'ai maintenant les deux versions :)
Jon Skeet

Utilisez-vous snippy pour vérifier cela? ;)
shahkalpesh

1
@UlyssesAlves: Je pense que cela new FileInfo(path).Directory.FullNamedevrait fonctionner dans les deux cas.
Jon Skeet



12

Vous pouvez utiliser System.IO.Path.GetDirectory(filename)ou transformer le chemin d'accès en un FileInfoet utiliser FileInfo.Directory.

Si vous faites d'autres choses avec le chemin, cela FileInfopeut avoir des avantages.


1
il n'y a pas de méthode 'GetDirectory dans la classe Path; vous devez avoir voulu dire «GetDirectoryName
BillW

12

Utilisez le code mentionné ci-dessous pour obtenir le chemin du dossier

Path.GetDirectoryName(filename);

Cela renverra "C: \ MyDirectory" dans votre cas



5

Si vous travaillez avec un FileInfoobjet, il existe un moyen simple d'extraire une stringreprésentation du chemin complet du répertoire via la DirectoryNamepropriété.

Description de la FileInfo.DirectoryNamepropriété via MSDN:

Obtient une chaîne représentant le chemin d'accès complet du répertoire.

Exemple d'utilisation:

string filename = @"C:\MyDirectory\MyFile.bat";
FileInfo fileInfo = new FileInfo(filename);
string directoryFullPath = fileInfo.DirectoryName; // contains "C:\MyDirectory"

Lien vers la documentation MSDN .


5

Vous pouvez obtenir le chemin d'application actuel en utilisant:

string AssemblyPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location).ToString();

Bonne chance!


0

Tout d'abord, vous devez utiliser l'espace de noms System.IO. Alors;

string filename = @"C:\MyDirectory\MyFile.bat";
string newPath = Path.GetFullPath(fileName);

ou

string newPath = Path.GetFullPath(openFileDialog1.FileName));

0

Vous pouvez utiliser Path.GetFullPathpour la plupart des cas. Mais si vous souhaitez obtenir le chemin également dans le cas où le nom de fichier est relativement localisé, vous pouvez utiliser la méthode générique ci-dessous:

string GetPath(string filePath)
{
  return Path.GetDirectoryName(Path.GetFullPath(filePath))
}

Par exemple:

GetPath("C:\Temp\Filename.txt") revenir "C:\Temp\"

GetPath("Filename.txt")retourner current working directorycomme"C:\Temp\"


0

Dans mon cas, j'avais besoin de trouver le nom du répertoire d'un chemin complet (d'un répertoire) alors j'ai simplement fait:

var dirName = path.Split('\\').Last();

1
Le PO a besoin "C:\MyDirectory"et non MyDirectory. Le conseil d'utiliser des méthodes de manipulation de chaînes est risqué, il existe de nombreux pièges, utilisez plutôt des Pathméthodes dédiées .
Sinatr

-1

Path.GetDirectoryName (Context.Parameters ["assemblypath"])


Path.GetDirectoryNameest mentionné dans de nombreuses autres réponses (y compris la réponse acceptée)
barbsan

ahha? Donc?? y a-t-il un point à venir?
Ami Vaknin
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.