Como obtenho o diretório a partir do caminho completo de um arquivo?


527

Qual é a maneira mais simples de obter o diretório em que um arquivo está? Estou usando isso para definir um diretório de trabalho.

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

Neste exemplo, eu deveria obter "C: \ MyDirectory".


3
Isso não deveria ser uma string literal? @"C:\MyDirectory\MyFile.bat"
Edgar

3
Alguém quer proteger esta pergunta que tem o direito de fazê-lo? 11 respostas semelhantes com o último a partir de 2017 ..
Boern

Respostas:


838

Se você definitivamente tem um caminho absoluto, use Path.GetDirectoryName(path).

Se você pode obter apenas um nome relativo, use new FileInfo(path).Directory.FullName.

Observe que Pathe FileInfosão encontrados no espaço para nome System.IO.


1
De fato, mas existe um método chamado GetDirectory? Não é GetDirectoryName?
Brandon

1
Você pode apenas usar o DirectoryName em vez do Directory.FullPath, não pode?
Steven Robbins

1
Eu estava à prova de receber um nome relativo. Eu não tinha percebido que o caminho seria absoluto. Eu agora tenho duas versões :)
Jon Skeet

Você usa o snippy para verificar isso? ;)
shahkalpesh 23/03/09

1
@UlyssesAlves: Eu acredito que new FileInfo(path).Directory.FullNamedeve funcionar em ambos os casos.
Jon Skeet



12

Você pode usar System.IO.Path.GetDirectory(filename)ou transformar o caminho em ae FileInfousar FileInfo.Directory.

Se você estiver fazendo outras coisas com o caminho, FileInfopode haver vantagens.


1
não existe um método 'GetDirectory na classe Path; você deve ter significado 'GetDirectoryName
BillW

12

Use o código abaixo mencionado para obter o caminho da pasta

Path.GetDirectoryName(filename);

Isso retornará "C: \ MyDirectory" no seu caso



5

Se você estiver trabalhando com um FileInfoobjeto, existe uma maneira fácil de extrair uma stringrepresentação do caminho completo do diretório por meio da DirectoryNamepropriedade

Descrição da FileInfo.DirectoryNamepropriedade via MSDN:

Obtém uma string representando o caminho completo do diretório.

Uso da amostra:

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

Link para a documentação do MSDN .


5

Você pode obter o caminho do aplicativo atual usando:

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

Boa sorte!


0

Primeiro, você precisa usar o espaço para nome System.IO. Então;

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

ou

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

0

Você pode usar Path.GetFullPathna maioria dos casos. Mas se você deseja obter o caminho também no caso de o nome do arquivo estar relativamente localizado, use o método genérico abaixo:

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

Por exemplo:

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

GetPath("Filename.txt")volte current working directorycomo"C:\Temp\"


0

No meu caso, eu precisava encontrar o nome do diretório de um caminho completo (de um diretório), então simplesmente:

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

1
O OP precisa "C:\MyDirectory"e não MyDirectory. O conselho para usar métodos de manipulação de string é arriscado, existem muitas armadilhas, em vez disso, use Pathmétodos dedicados .
Sinatr

-1

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


Path.GetDirectoryNameé mencionado em muitas outras respostas (incluindo resposta aceita)
barbsan

ahha? Assim?? há algum ponto vindo?
Ami Vaknin
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.