string path = "C:/folder1/folder2/file.txt";
Những đối tượng hoặc phương pháp nào tôi có thể sử dụng sẽ cho tôi kết quả folder2
?
string path = "C:/folder1/folder2/file.txt";
Những đối tượng hoặc phương pháp nào tôi có thể sử dụng sẽ cho tôi kết quả folder2
?
Câu trả lời:
Tôi có thể sẽ sử dụng một cái gì đó như:
string path = "C:/folder1/folder2/file.txt";
string lastFolderName = Path.GetFileName( Path.GetDirectoryName( path ) );
Cuộc gọi bên trong GetDirectoryName
sẽ trả về đường dẫn đầy đủ, trong khi cuộc gọi bên ngoài tớiGetFileName()
sẽ trả về thành phần đường dẫn cuối cùng - sẽ là tên thư mục.
Cách tiếp cận này hoạt động cho dù đường dẫn có thực sự tồn tại hay không. Tuy nhiên, cách tiếp cận này dựa vào đường dẫn ban đầu kết thúc bằng tên tệp. Nếu không biết đường dẫn kết thúc bằng tên tệp hay tên thư mục - thì nó yêu cầu bạn kiểm tra đường dẫn thực tế để xem liệu tệp / thư mục có tồn tại ở vị trí đó trước không. Trong trường hợp đó, câu trả lời của Dan Dimitru có thể phù hợp hơn.
Đơn giản & sạch sẽ. Chỉ sử dụng System.IO.FileSystem
- hoạt động như một bùa mê:
string path = "C:/folder1/folder2/file.txt";
string folder = new DirectoryInfo(path).Name;
file.txt
, và khôngfolder2
Tôi đã sử dụng đoạn mã này để lấy thư mục cho một đường dẫn khi không có tên tệp trong đường dẫn:
ví dụ: "c: \ tmp \ test \ visual";
string dir = @"c:\tmp\test\visual";
Console.WriteLine(dir.Replace(Path.GetDirectoryName(dir) + Path.DirectorySeparatorChar, ""));
Đầu ra:
trực quan
Cũng cần lưu ý rằng trong khi nhận được danh sách các tên thư mục trong một vòng lặp, DirectoryInfo
lớp sẽ được khởi tạo một lần do đó chỉ cho phép gọi lần đầu tiên. Để bỏ qua giới hạn này, đảm bảo bạn sử dụng các biến trong vòng lặp của mình để lưu trữ bất kỳ tên thư mục riêng lẻ nào.
Ví dụ, mã mẫu này lặp qua một danh sách các thư mục trong bất kỳ thư mục mẹ nào trong khi thêm từng tên thư mục tìm thấy bên trong Danh sách loại chuỗi:
[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
Mã dưới đây chỉ giúp lấy tên thư mục
các mục ObservableCollection công khai = new ObservableCollection (); thử { chuỗi [] folderPaths = Directory.GetDirectories (stemp); các mặt hàng.Clear (); foreach (chuỗi s trong thư mụcPaths) { mục.Add (new GridItems {Foldername = s.Remove (0, s.LastIndexOf ('\\') + 1), folderpath = s}); } } bắt (Ngoại lệ a) { } lưới lớp học công cộng { tên người dùng chuỗi công khai {get; bộ; } chuỗi thư mục công cộng {get; bộ; } }
Điều này là xấu xí nhưng tránh phân bổ:
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;
}