C # में वर्तमान निर्देशिका नाम का अंतिम भाग प्राप्त करें


158

मुझे वर्तमान निर्देशिका का अंतिम भाग प्राप्त करने की आवश्यकता है, उदाहरण के लिए /Users/smcho/filegen_from_directory/AIRPassthrough, मुझे प्राप्त करने की आवश्यकता है AIRPassthrough

अजगर के साथ, मैं इसे इस कोड के साथ प्राप्त कर सकता हूं।

import os.path

path = "/Users/smcho/filegen_from_directory/AIRPassthrough"
print os.path.split(path)[-1]

या

print os.path.basename(path)

मैं C # के साथ एक ही काम कैसे कर सकता हूं?

जोड़ा

उत्तरदाताओं की मदद से, मुझे वह मिल गया जिसकी मुझे आवश्यकता थी।

using System.Linq;
string fullPath = Path.GetFullPath(fullPath).TrimEnd(Path.DirectorySeparatorChar);
string projectName  = fullPath.Split(Path.DirectorySeparatorChar).Last();

या

string fullPath = Path.GetFullPath(fullPath).TrimEnd(Path.DirectorySeparatorChar);
string projectName = Path.GetFileName(fullPath);


1
अजगर में, आपको बल्कि करना चाहिए os.path.basename(path)
रेनेसाक

जवाबों:


132

तुम खोज रहे हो Path.GetFileName
ध्यान दें कि यदि पथ समाप्त होता है तो यह काम नहीं करेगा \


3
@anti: गलत; मैं इसे करने की कोशिश की। तार तार होते हैं। Path.GetFileName("/Users/smcho/filegen_from_directory/AIRPassthrough")अगर आपको मुझ पर विश्वास नहीं है तो LINQPad में पेस्ट करें ।
SLaks

@antisanity नहीं, यह निर्देशिका नाम लौटाएगा, लेकिन यह शायद वैसा नहीं है जैसा सवाल था।
जैकब मोलास

@ जाकोब: शीर्षक को देखते हुए, मुझे लगता है कि यही सवाल है।
SLaks

3
@ लाइट: यह काम करता है ; कोशिश करो। Pathवर्ग दोनों विभाजक संभालती है।
SLaks

31
डायरेक्ट्री द्वारा प्राप्त निर्देशिका के साथ इस काम को करने के लिए। GetDirectories का उपयोग करें: string directoryName = Path.GetFileName (directory.TrimEnd (Path.DirectorySeparatorChar));
फतलाड

185

तुम कोशिश कर सकते हो:

var path = @"/Users/smcho/filegen_from_directory/AIRPassthrough/";
var dirName = new DirectoryInfo(path).Name;

20
मुझे चुने हुए उत्तर की तुलना में यह बेहतर लगता है। (Ab) GetFileName का उपयोग करना शब्दार्थ से गलत है क्योंकि यह एक निर्देशिका है जिसे आप पुनः प्राप्त करने का प्रयास कर रहे हैं। इसके अलावा, GetFileName को नियतात्मक बनाने के लिए आपको पीछे चल रहे स्लैश या बैकस्लैश की संभावना के लिए ध्यान देना होगा, और इसे बंद करना होगा, जो कि बदसूरत है।
साइमन ब्रानगविन

var dirName = new DirectoryInfo (Path.GetDirectoryName (pathWithFilename))। नाम // बेहतर है
kernowcode

@kernowcode मेरा मानना ​​है कि ओपी के अनुरोध के अनुसार '' AIRPassthrough '' के बजाय "filegen_from_directory" वापस आएगा।
codybartfast

1
@SimonBrangwin मुझे लगा कि सब कुछ लिनक्स में एक फाइल है :)
रेजर

12

ठीक है, वास्तव में अपने सवाल का जवाब देने के लिए :-)

var lastPartOfCurrentDirectoryName = 
   Path.GetFileName(Environment.CurrentDirectory);

12

यह थोड़ा अलग जवाब है, जो आपके पास है उसके आधार पर। यदि आपके पास फ़ाइलों की एक सूची है और अंतिम निर्देशिका का नाम प्राप्त करने की आवश्यकता है जो फ़ाइल में है तो आप ऐसा कर सकते हैं:

string path = "/attachments/1828_clientid/2938_parentid/somefiles.docx";
string result = new DirectoryInfo(path).Parent.Name;

यह "2938_परेंटिड" लौटेगा


8

बल्कि कॉल को विभाजित करने के लिए '/' का उपयोग करते हुए, का उपयोग करने के लिए बेहतर Path.DirectorySeparatorChar:

इस तरह:

path.split(Path.DirectorySeparatorChar).Last() 

1
इस समाधान का उपयोग करने के बारे में एक बात मुझे पसंद नहीं है कि यह एक धारणा बनाता है कि स्ट्रिंग कहां से आ रही है। यदि वे पढ़ रहे हैं तो * विंडोज सिस्टम पर निक्स लॉग? फिर गलत चरित्र का उपयोग किया जाएगा और आप इच्छित प्रभाव के बजाय पूरे पथ के साथ समाप्त हो जाएंगे। बस मेरे 2 सेंट।
बॉब जी

मैं तुम्हारे साथ इस बात पर सहमत हूँ। ओपी ने कहा कि 'वर्तमान निर्देशिका का अंतिम भाग' उसके लिए है, यह ठीक है।
मुदादिब

6
var lastFolderName = Path.GetFileName(
    path.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar));

यह काम करता है अगर पथ आगे स्लैश विभाजकों या बैकस्लैश विभाजकों को समाहित करता है।


1
यह string.TrimEnd () कई वर्णों को स्वीकार करता है, इसलिए कई कॉल का उपयोग करने की कोई आवश्यकता नहीं है। msdn.microsoft.com/en-us/library/…
काइल डेलाने 19

1
@KyleDelaney तो यह करता है! उत्तर समायोजित।
१०:

1
यह एक परम सरणी है, इसलिए .TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar)भी काम करता है।
काइल डेलाने

1
.TrimEnd () का लागू स्थान गलत है। इसे पथ पर लागू किया जाना चाहिए , Path.GetFileName पर नहीं । @ फेटलड
टोनी

2

इसे इस्तेमाल करे:

String newString = "";
Sting oldString = "/Users/smcho/filegen_from_directory/AIRPassthrough";

int indexOfLastSlash = oldString.LastIndexOf('/', 0, oldString.length());

newString = oldString.subString(indexOfLastSlash, oldString.length());

कोड बंद हो सकता है (मैंने इसका परीक्षण नहीं किया है) लेकिन विचार काम करना चाहिए


1

यह मेरे साथ पूरी तरह से ठीक काम करता है :)

Path.GetFileName(path.TrimEnd('\\')

0

आप नीचे दिए गए कोड की कोशिश कर सकते हैं:

Path.GetFileName(userpath)


0

आप उरी वर्ग का भी उपयोग कर सकते हैं।

new Uri("file:///Users/smcho/filegen_from_directory/AIRPassthrough").Segments.Last()

यदि आप कुछ अन्य सेगमेंट प्राप्त करना चाहते हैं, या यदि आप वेब पते के साथ यही काम करना चाहते हैं तो आप इस क्लास का उपयोग करना पसंद कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.