web-dev-qa-db-ja.com

パスからフォルダー名を取得する

string path = "C:/folder1/folder2/file.txt";

folder2の結果が得られるオブジェクトまたはメソッドを使用できますか?

162
Ash Burlaczenko

私はおそらく次のようなものを使用します:

string path = "C:/folder1/folder2/file.txt";
string lastFolderName = Path.GetFileName( Path.GetDirectoryName( path ) );

GetDirectoryNameの内部呼び出しはフルパスを返し、GetFileName()の外部呼び出しは最後のパスコンポーネント(フォルダー名)を返します。

このアプローチは、パスが実際に存在するかどうかに関係なく機能します。ただし、このアプローチは、最初にファイル名で終わるパスに依存します。パスがファイル名で終わるのかフォルダ名で終わるのかわからない場合は、実際のパスを確認して、最初にその場所にファイル/フォルダーが存在するかどうかを確認する必要があります。その場合、ダン・ディミトルの答えがより適切かもしれません。

293
LBushkin

これを試して:

string filename = @"C:/folder1/folder2/file.txt";
string FolderName = new DirectoryInfo(System.IO.Path.GetDirectoryName(filename)).Name;
28
Wahyu

シンプルでクリーン。 System.IO.FileSystemのみを使用-チャームのように機能します:

string path = "C:/folder1/folder2/file.txt";
string folder = new DirectoryInfo(path).Name;
12
susieloo_

パスにファイル名がない場合に、このコードスニペットを使用してパスのディレクトリを取得しました。

たとえば、「c:\ tmp\test\visual」;

string dir = @"c:\tmp\test\visual";
Console.WriteLine(dir.Replace(Path.GetDirectoryName(dir) + Path.DirectorySeparatorChar, ""));

出力:

ビジュアル

6
Mario

DirectoryInfoディレクトリ名を削除するジョブを実行します

string my_path = @"C:\Windows\System32";
DirectoryInfo dir_info = new DirectoryInfo(my_path);
string directory = dir_info.Name;  // System32
6
Sayka
var fullPath = @"C:\folder1\folder2\file.txt";
var lastDirectory = Path.GetDirectoryName(fullPath).Split('\\').LastOrDefault();
2
Shawn

以下のコードは、フォルダー名のみを取得するのに役立ちます

 
 public ObservableCollection items = new ObservableCollection(); 
 
 try 
 {
 string [] folderPaths = Directory.GetDirectories( stemp); 
 items.Clear(); 
 foreach(folderPathsの文字列s)
 {
 items.Add(new gridItems {foldername = s.Remove( 0、s.LastIndexOf( '\\')+ 1)、folderpath = s}); 
 
} 
 
} 
 catch(例外a)
 {
 
} 
 public class gridItems 
 {
 public string foldername {get;セット; } 
 public string folderpath {get;セット; } 
} 
1
Joee

また、ループでディレクトリ名のリストを取得している間、DirectoryInfoクラスは1回初期化されるため、初回呼び出しのみが許可されることに注意することも重要です。この制限を回避するには、ループ内で変数を使用して個々のディレクトリ名を保存するようにしてください。

たとえば、このサンプルコードは、親ディレクトリ内のディレクトリのリストをループし、見つかった各ディレクトリ名を文字列タイプのリスト内に追加します。

[C#]

string[] parentDirectory = Directory.GetDirectories("/yourpath");
List<string> directories = new List<string>();

foreach (var directory in parentDirectory)
{
    // Notice I've created a DirectoryInfo variable.
    DirectoryInfo dirInfo = new DirectoryInfo(directory);

    // And likewise a name variable for storing the name.
    // If this is not added, only the first directory will
    // be captured in the loop; the rest won't.
    string name = dirInfo.Name;

    // Finally we add the directory name to our defined List.
    directories.Add(name);
}

[VB.NET]

Dim parentDirectory() As String = Directory.GetDirectories("/yourpath")
Dim directories As New List(Of String)()

For Each directory In parentDirectory

    ' Notice I've created a DirectoryInfo variable.
    Dim dirInfo As New DirectoryInfo(directory)

    ' And likewise a name variable for storing the name.
    ' If this is not added, only the first directory will
    ' be captured in the loop; the rest won't.
    Dim name As String = dirInfo.Name

    ' Finally we add the directory name to our defined List.
    directories.Add(name)

Next directory
0
Willy Kimura