Come posso ottenere la directory dal percorso completo di un file?


527

Qual è il modo più semplice per ottenere la directory in cui si trova un file? Sto usando questo per impostare una directory di lavoro.

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

In questo esempio, dovrei ottenere "C: \ MyDirectory".


3
Non dovrebbe essere una stringa letterale? @"C:\MyDirectory\MyFile.bat"
Edgar,

3
Qualcuno vuole proteggere questa domanda chi ha i diritti per farlo? 11 risposte simili con l'ultima del 2017 ..
Boern,

Risposte:


838

Se hai sicuramente un percorso assoluto, usa Path.GetDirectoryName(path).

Se potresti ottenere solo un nome relativo, usa new FileInfo(path).Directory.FullName.

Si noti che Pathe si FileInfotrovano entrambi nello spazio dei nomi System.IO.


1
Anzi, ma esiste un metodo chiamato GetDirectory? Non è GetDirectoryName?
Brandon,

1
Puoi semplicemente usare DirectoryName invece di Directory.FullPath no?
Steven Robbins,

1
Stavo dimostrando di non ricevere un nome relativo. Non avevo notato che il percorso sarà assoluto. Ora ho entrambe le versioni :)
Jon Skeet,

Usi snippy per verificarlo? ;)
shahkalpesh,

1
@UlyssesAlves: credo che new FileInfo(path).Directory.FullNamedovrebbe funzionare in entrambi i casi.
Jon Skeet,



12

È possibile utilizzare System.IO.Path.GetDirectory(filename)o trasformare il percorso in a FileInfoe utilizzare FileInfo.Directory.

Se stai facendo altre cose con il percorso, FileInfopotrebbero avere dei vantaggi.


1
non esiste un metodo GetDirectory nella classe Path; devi aver significato "GetDirectoryName
BillW

12

Utilizzare il codice sotto indicato per ottenere il percorso della cartella

Path.GetDirectoryName(filename);

Questo restituirà "C: \ MyDirectory" nel tuo caso



5

Se si lavora con un FileInfooggetto, esiste un modo semplice per estrarre una stringrappresentazione del percorso completo della directory tramite la DirectoryNameproprietà.

Descrizione della FileInfo.DirectoryNameproprietà tramite MSDN:

Ottiene una stringa che rappresenta il percorso completo della directory.

Esempio di utilizzo:

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

Link alla documentazione MSDN .


5

È possibile ottenere il percorso dell'applicazione corrente utilizzando:

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

In bocca al lupo!


0

Innanzitutto, devi usare lo spazio dei nomi System.IO. Poi;

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

o

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

0

È possibile utilizzare Path.GetFullPathper la maggior parte del caso. Ma se vuoi ottenere il percorso anche nel caso in cui il nome del file sia relativamente localizzato, puoi usare il metodo generico qui sotto:

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

Per esempio:

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

GetPath("Filename.txt")ritorna current working directorycome"C:\Temp\"


0

Nel mio caso, dovevo trovare il nome della directory di un percorso completo (di una directory), quindi ho semplicemente fatto:

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

1
L'OP ha bisogno "C:\MyDirectory"e non MyDirectory. Il consiglio di usare i metodi di manipolazione delle stringhe è rischioso, ci sono molte trappole, piuttosto usare Pathmetodi dedicati .
Sinatr,

-1

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


Path.GetDirectoryNameè menzionato in molte altre risposte (inclusa la risposta accettata)
barbsan

ahha? Così?? c'è qualche punto in arrivo?
Ami Vaknin l'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.