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()
अंतिम पथ घटक को लौटाएगा - जो फ़ोल्डर का नाम होगा।
यह दृष्टिकोण काम करता है कि क्या वास्तव में पथ मौजूद है या नहीं। यह दृष्टिकोण, हालांकि, शुरू में एक फ़ाइलनाम में समाप्त होने वाले मार्ग पर निर्भर करता है। यदि यह अज्ञात है कि पथ किसी फ़ाइल नाम या फ़ोल्डर के नाम पर समाप्त होता है - तो इसके लिए यह आवश्यक है कि आप वास्तविक पथ की जाँच करें कि क्या कोई फ़ाइल / फ़ोल्डर पहले स्थान पर मौजूद है। उस स्थिति में, दान दिमित्रु का उत्तर अधिक उपयुक्त हो सकता है।
सरल और साफ। केवल उपयोग करता है System.IO.FileSystem
- एक आकर्षण की तरह काम करता है:
string path = "C:/folder1/folder2/file.txt";
string folder = new DirectoryInfo(path).Name;
file.txt
, और नहींfolder2
जब पथ में कोई फ़ाइल नाम नहीं है, तो मुझे इस कोड स्निपेट का उपयोग उस मार्ग के लिए निर्देशिका प्राप्त करने के लिए करना चाहिए:
उदाहरण के लिए "c: \ tmp \ test \ Visual";
string dir = @"c:\tmp\test\visual";
Console.WriteLine(dir.Replace(Path.GetDirectoryName(dir) + Path.DirectorySeparatorChar, ""));
आउटपुट:
दृश्य
यह भी ध्यान रखना महत्वपूर्ण है कि एक लूप में निर्देशिका नामों की सूची प्राप्त करने के दौरान, DirectoryInfo
क्लास को एक बार प्रारंभ किया जाता है , इस प्रकार केवल पहली बार कॉल करने की अनुमति मिलती है। इस सीमा को बायपास करने के लिए, आप किसी भी व्यक्तिगत निर्देशिका के नाम को संग्रहीत करने के लिए अपने लूप के भीतर चर का उपयोग सुनिश्चित करें।
उदाहरण के लिए, यह नमूना कोड स्ट्रिंग प्रकार की सूची के अंदर प्रत्येक पाया निर्देशिका-नाम को जोड़ते हुए किसी भी मूल निर्देशिका के भीतर निर्देशिकाओं की सूची के माध्यम से लूप करता है:
[सी#]
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
नीचे कोड केवल फ़ोल्डर का नाम पाने में मदद करता है
सार्वजनिक वेधशाला का चयन आइटम = नई वेधशाला का चयन (); प्रयत्न { string [] folderPaths = Directory.GetDirectories (stemp); items.Clear (); foreach (फ़ोल्डर में स्ट्रिंग s) { आइटम्स। जोड़ें (नया ग्रिडइमेंस {फ़ोल्डरनाम = एस.रेमोव (0, एस.लिस्टइंडेक्सऑफ़ ('\\') + 1), फ़ोल्डरपथ = एस}); } } पकड़ना (अपवाद) { } सार्वजनिक वर्ग के ग्रिड { सार्वजनिक स्ट्रिंग फ़ोल्डरनाम {प्राप्त करें; सेट; } सार्वजनिक स्ट्रिंग फ़ोल्डरपथ {प्राप्त करें; सेट; } }
यह बदसूरत है, लेकिन आवंटन से बचा जाता है:
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;
}