ファイルの完全パスからディレクトリを取得するにはどうすればよいですか?


527

ファイルがあるディレクトリを取得する最も簡単な方法は何ですか?これを使用して作業ディレクトリを設定しています。

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

この例では、「C:\ MyDirectory」を取得する必要があります。


3
それは文字列リテラルではないですか?@"C:\MyDirectory\MyFile.bat"
エドガー14

3
この質問を保護する権利を持っている人がいますか?2017年からの最後と11と同様の答え...
Boern

回答:


838

絶対パスが確実にわかっている場合は、を使用してくださいPath.GetDirectoryName(path)

相対名しか取得できない場合は、を使用してくださいnew FileInfo(path).Directory.FullName

なお、Path及びFileInfo両方の名前空間にありますSystem.IO


1
確かに、GetDirectoryというメソッドはありますか?GetDirectoryNameではありませんか?
ブランドン

1
Directory.FullPathの代わりにDirectoryNameを使用できますか?
スティーブンロビンス

1
私は相対的な名前を受け取ることを証明していました。私は道が絶対であることを発見していませんでした。私は今両方のバージョンを持っています:)
Jon Skeet

それを確認するためにスニッピーを使用していますか?;)
shahkalpesh 2009年

1
@UlyssesAlves:new FileInfo(path).Directory.FullNameどちらの場合でも機能するはずです。
ジョンスキート



12

を使用するSystem.IO.Path.GetDirectory(filename)か、パスをに変えてFileInfoを使用できますFileInfo.Directory

パスで他のことをしているFileInfo場合は、利点があります。


1
パスクラスに 'GetDirectoryメソッドはありません。'GetDirectoryName
BillW

12

下記のコードを使用してフォルダーパスを取得します

Path.GetDirectoryName(filename);

これはあなたの場合「C:\ MyDirectory」を返します



5

FileInfoオブジェクトを使用している場合、プロパティstringを使用してディレクトリの完全パスの表現を抽出する簡単な方法がありDirectoryNameます。

FileInfo.DirectoryNameMSDNによるプロパティの説明:

ディレクトリの完全パスを表す文字列を取得します。

使用例:

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

MSDNドキュメントへのリンク。


5

次のコマンドを使用して、現在のアプリケーションパスを取得できます。

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

幸運を!


0

まず、System.IO名前空間を使用する必要があります。その後;

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

または

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

0

Path.GetFullPathほとんどの場合に使用できます。しかし、ファイル名が比較的配置されている場合にもパスを取得したい場合は、以下の一般的な方法を使用できます。

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

例えば:

GetPath("C:\Temp\Filename.txt") 返す "C:\Temp\"

GetPath("Filename.txt")current working directoryように戻る"C:\Temp\"


0

私の場合、(ディレクトリの)フルパスのディレクトリ名を見つける必要があったので、次のようにしました。

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

1
OPは必要"C:\MyDirectory"ありませんMyDirectory。文字列操作メソッドを使用するためのアドバイスは危険であり、多くのトラップがあり、むしろ専用Pathメソッドを使用します。
Sinatr

-1

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


Path.GetDirectoryName他の多くの回答(承認された回答を含む)で言及されている
barbsan

ああ?そう??何か意味がありますか?
Ami Vaknin
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.