string path = "C:/folder1/folder2/file.txt";
どのオブジェクトまたはメソッドを使用すれば、結果はfolder2
どうなりますか?
string path = "C:/folder1/folder2/file.txt";
どのオブジェクトまたはメソッドを使用すれば、結果はfolder2
どうなりますか?
回答:
私はおそらく次のようなものを使用します:
string path = "C:/folder1/folder2/file.txt";
string lastFolderName = Path.GetFileName( Path.GetDirectoryName( path ) );
への内部呼び出しGetDirectoryName
は完全なパスを返し、外部への呼び出しGetFileName()
は最後のパスコンポーネント(フォルダー名)を返します。
このアプローチは、パスが実際に存在するかどうかに関係なく機能します。ただし、このアプローチは、最初はファイル名で終わるパスに依存しています。パスがファイル名で終わるかフォルダ名で終わるか不明な場合は、実際のパスをチェックして、最初にその場所にファイル/フォルダが存在するかどうかを確認する必要があります。その場合、Dan Dimitruの回答がより適切な場合があります。
パスにファイル名がない場合、このコードスニペットを使用してパスのディレクトリを取得しました。
たとえば "c:\ tmp \ test \ visual";
string dir = @"c:\tmp\test\visual";
Console.WriteLine(dir.Replace(Path.GetDirectoryName(dir) + Path.DirectorySeparatorChar, ""));
出力:
ビジュアル
ループでディレクトリ名のリストを取得している間、DirectoryInfo
クラスは一度初期化されるため、初回の呼び出しのみが許可されることに注意することも重要です。この制限を回避するには、ループ内で変数を使用して、個々のディレクトリの名前を保存するようにしてください。
たとえば、次のサンプルコードは、文字列型のリスト内に見つかった各ディレクトリ名を追加しながら、親ディレクトリ内のディレクトリのリストをループします。
[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
以下のコードはフォルダ名のみを取得するのに役立ちます
public ObservableCollection items = new ObservableCollection(); 試す { string [] folderPaths = Directory.GetDirectories(stemp); items.Clear(); foreach(folderPathsの文字列s) { items.Add(new gridItems {foldername = s.Remove(0、s.LastIndexOf( '\\')+ 1)、folderpath = s}); } } キャッチ(例外a) { } パブリッククラスgridItems { public string foldername {get; セットする; } public string folderpath {get; セットする; } }
これは醜いですが、割り当てを回避します:
private static string GetFolderName(string path)
{
var end = -1;
for (var i = path.Length; --i >= 0;)
{
var ch = path[i];
if (ch == System.IO.Path.DirectorySeparatorChar ||
ch == System.IO.Path.AltDirectorySeparatorChar ||
ch == System.IO.Path.VolumeSeparatorChar)
{
if (end > 0)
{
return path.Substring(i + 1, end - i - 1);
}
end = i;
}
}
if (end > 0)
{
return path.Substring(0, end);
}
return path;
}