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

Quel est le moyen le 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:MyDirectoryMyFile.bat";

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

428
demandé sur bluish 2009-03-23 20:49:13

12 réponses

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 Path et FileInfo se trouvent tous les deux dans l'espace de noms System.IO.

697
répondu Jon Skeet 2015-10-31 23:46:37
System.IO.Path.GetDirectoryName(filename)
46
répondu Cherian 2009-03-23 17:52:57
Path.GetDirectoryName(filename);
19
répondu Grzenio 2009-03-23 17:52:44

Vous pouvez utiliser System.IO.Path.GetDirectory(filename), ou tournez-la dans un tracé FileInfo, et l'utilisation FileInfo.Directory.

Si vous faites d'autres choses avec le chemin, le FileInfo peut avoir des avantages.

12
répondu Reed Copsey 2013-01-04 19:32:20

Vous pouvez utiliser Path.GetDirectoryName et simplement passer le nom de fichier.

Lien MSDN

9
répondu Brandon 2014-02-06 16:25:06

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

Path.GetDirectoryName(filename);

Cela retournera "C:\MyDirectory" dans votre cas

8
répondu thejustv 2015-08-13 15:49:43

Si vous travaillez avec un objet FileInfo, Il existe un moyen facile d'extraire une représentation string du chemin complet du répertoire via la propriété DirectoryName.

Description de la propriété FileInfo.DirectoryName via MSDN:

Obtient une chaîne représentant le chemin 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 .

4
répondu Derek W 2014-05-27 21:40:52

Vous pouvez obtenir le chemin de L'Application en cours en utilisant:

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

Bonne Chance!

4
répondu David Castro 2016-07-01 16:14:52

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

var dirName = path.Split('\\').Last();
2
répondu Amir No-Family 2018-07-17 14:44:23

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

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

Ou

string newPath = Path.GetFullPath(openFileDialog1.FileName));
1
répondu Umut D. 2015-07-01 16:19:34

, Vous pouvez utiliser Path.GetFullPath pour la plupart des cas. Mais si vous voulez obtenir le chemin aussi dans le cas du nom de fichier est relativement situé alors 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") de retour "C:\Temp\"

GetPath("Filename.txt") de retour current working directory comme "C:\Temp\"

0
répondu Minh Nguyen 2017-08-28 11:49:49

Juste au cas où quelqu'un d'autre en aurait besoin, ce que j'ai utilisé pour mon chemin relatif était:

string rootPath = "MyRootDir/MyFolder1/MyFolder2/myFile.pdf";
while (!string.IsNullOrWhiteSpace(Path.GetDirectoryName(rootPath))) 
{
    rootPath = Path.GetDirectoryName(rootPath);
} 
Console.WriteLine(rootPath); //Will print: "MyRootDir"
0
répondu Sal 2018-01-12 19:25:52