2009-03-19 23 views

उत्तर

71

उपयोग: मुझे स्कीट से सहमत नहीं के लिए

new FileInfo(@"C:\temp\temp2\foo\bar.txt").Directory.Name 
+3

http://msdn.microsoft.com/en-us/library/system.io.fileinfo.fileinfo.aspx के अनुसार फ़ाइलइन्फो कन्स्ट्रक्टर फेंक सकता है अगर कॉलर के पास आवश्यक अनुमति नहीं है। क्या कोई विकल्प है जो बिना किसी आईओ के स्ट्रिंग को पार्स करेगा? – GuiSim

+0

@ गुईसिम: ऐसा नहीं है कि मुझे पता है। –

+10

यदि किसी को पूर्ण निर्देशिका पथ की आवश्यकता है, तो 'new FileInfo (@" C: \ temp \ temp2 \ foo \ bar.txt ") का उपयोग करें। निर्देशिका नाम 'इसके बजाय। –

7

सुदूर यह हो, लेकिन मैं हमेशा

Path.GetFileNameWithoutExtension(@"C:\temp\temp2\foo\bar.txt") 

का उपयोग किया है मुझे लगता है कि वास्तव में FileInfo फाइल सिस्टम को छू लेती है यह जानकारी है पाने के लिए , जहां मैं उम्मीद करता हूं कि GetFileNameWithoutExtension केवल स्ट्रिंग ऑपरेशंस है - इसलिए दूसरे पर एक का प्रदर्शन बेहतर हो सकता है।

+0

यहां परिणामों में थोड़ा अंतर है ... मुझे लगता है कि आपका दृष्टिकोण "बार" देता है जब सवाल पूछता है कि फ़ाइल की निर्देशिका में "foo" कैसे प्राप्त करें ... –

+7

मैंने आज दो चीजें सीखी हैं ... प्रश्न पढ़ें और स्कीट से कभी असहमत न हों। – Handleman

+2

पथ नहीं है .getDirectoryName वही करता है जो वह चाहता है? –

2

मैं एक अवसर था जब मैं माता-पिता बच्चे को निर्देशिका

string[] years = Directory.GetDirectories(ROOT); 
foreach (var year in years) 
{ 
    DirectoryInfo info = new DirectoryInfo(year); 
    Console.WriteLine(info.Name); 
    Console.WriteLine(year); 
    //Month directories 
    string[] months = Directory.GetDirectories(year); 
    foreach (var month in months) 
    { 
     Console.WriteLine(month); 
     //Day directories 
     string[] days = Directory.GetDirectories(month); 
     foreach (var day in days) 
     { 
      //checkes the files in the days 
      Console.WriteLine(day); 
      string[] files = Directory.GetFiles(day); 
      foreach (var file in files) 
      { 
       Console.WriteLine(file);        
      } 
     } 
    } 
} 

के माध्यम से पाशन था इस लाइन मैं केवल वर्तमान निर्देशिका नाम

DirectoryInfo info = new DirectoryInfo(year); 
Console.WriteLine(info.Name); 
+0

+1 मैं लगभग बिल्कुल वही कर रहा हूं ... – SMUsamaShah

1

प्राप्त करने में सक्षम था का उपयोग कर यह आप कैसे पर निर्भर करता हूँ डेटा को संभालना चाहते हैं, लेकिन स्ट्रिंग का उपयोग करने का दूसरा विकल्प है। स्प्लिट।

string myStr = @"C:\foo\bar.txt"; 
string[] paths = myStr.Split('\\'); 
string dir = paths[paths.Length - 2]; //returns "foo" 

यह सीमा अपवाद से बाहर एक सरणी की जांच नहीं करता है, लेकिन आप विचार मिलता है।

+0

यह लिनक्स पर असफल हो जाएगा। – JensG

+0

पथ। डायरेक्टरी SeparatorChar – Ruudjah

7

मुझे लगता है कि सबसे सरल उपाय Handleman के सुझाव पर

 
DirectoryInfo dinfo = new DirectoryInfo(path); 

string folderName= dinfo.Parent.Name; 
3

बिल्डिंग है, तो आप कर सकते हैं:

Path.GetFileName(Path.GetDirectoryName(path)) 

इस फाइल सिस्टम स्पर्श नहीं करता है (FileInfo के विपरीत), और क्या आवश्यक है क्या करेंगे । पथ का अंतिम निर्देशिका चरित्र के बाद वर्ण: यह फ़ोल्डरों के साथ काम करेंगे, क्योंकि MSDN कहते हैं:

वापसी मान। यदि अंतिम पथ का चरित्र निर्देशिका या वॉल्यूम विभाजक चरित्र है, तो यह विधि स्ट्रिंग। लक्षण देता है। यदि पथ शून्य है, तो यह विधि शून्य देता है।

इसके अलावा, reference source को देखकर पुष्टि करता है कि GetFilename परवाह नहीं करता है, तो रास्ते में पारित कर दिया एक फ़ाइल या फ़ोल्डर है: यह सिर्फ शुद्ध स्ट्रिंग परिवर्तन कर रहा है।

संबंधित मुद्दे