2008-11-25 10 views
9

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

int folderDepth = 0; 
    string tmpPath = startPath; 
    while (Directory.GetParent(tmpPath) != null) { 
     folderDepth++; 
     tmpPath = Directory.GetParent(tmpPath).FullName; 
    } 
    return folderDepth; 

यह काम करता है लेकिन मुझे संदेह है कि एक बेहतर/तेज़ तरीका है? किसी भी प्रतिक्रिया के लिए बहुत अधिक बाध्य।

उत्तर

11
मेरे सिर के ऊपर बंद

:

Directory.GetFullPath().Split("\\").Length; 
+0

बहुत पसंद है! बस एक त्वरित नोट, लंबाई एक संपत्ति एक विधि नहीं है। – BFree

+0

ओह, अच्छा बिंदु; मैं इसे संपादित कर दूंगा ... –

+5

अन्यथा मान्य अनुक्रमों जैसे कि C: \ फ़ोल्डर \ .. \ boot.ini के लिए टूटा जाएगा। या, यूएनसी नेटवर्क पथ जैसे \\ सर्वर \ शेयर \ फ़ाइल के लिए। और, आपको शायद पथ का उपयोग करना चाहिए। डायरेक्टरी SeperatorCharacter और Path.AltDirectorySeperatorCharacter। –

0

आप Path वर्ग के सदस्यों का उपयोग करते हैं, तो आप पथ जुदाई चरित्र और अन्य पथ से संबंधित चेतावनियां की स्थानीयकरणों के साथ सामना कर सकते हैं। निम्नलिखित कोड गहराई (रूट सहित) प्रदान करता है। यह खराब तारों और इतने मजबूत नहीं है, लेकिन यह आपके लिए एक शुरुआत है।

 int depth = 0; 
     do 
     { 
      path = Path.GetDirectoryName(path); 
      Console.WriteLine(path); 
      ++depth; 
     } while (!string.IsNullOrEmpty(path)); 

     Console.WriteLine("Depth = " + depth.ToString()); 
2

मानते हुए अपना रास्ता पहले से ही वैध होने के लिए संचालित किया गया है, .NET 3.5 में आप भी LINQ इस्तेमाल कर सकते हैं कोड का 1 पंक्ति में यह करने के लिए ...

Console.WriteLine (@ " सी: \ फ़ोल्डर 1 \ फ़ोल्डर 2 \ फ़ोल्डर 3 \ फ़ोल्डर 4 \ MyFile.txt "। जहां (सी => सी = @" \ ") गणना करें।

3

मैं हमेशा एक प्रशंसक समाधान प्रशंसक हूं। अक्षम, लेकिन मजेदार!

public static int FolderDepth(string path) 
    { 
     if (string.IsNullOrEmpty(path)) 
      return 0; 
     DirectoryInfo parent = Directory.GetParent(path); 
     if (parent == null) 
      return 1; 
     return FolderDepth(parent.FullName) + 1; 
    } 

मुझे सी # में लिस्पी कोड पसंद है!

यहाँ है कि मैं और भी बेहतर की तरह एक और पुनरावर्ती संस्करण है, और शायद अधिक कुशल है:

public static int FolderDepth(string path) 
    { 
     if (string.IsNullOrEmpty(path)) 
      return 0; 
     return FolderDepth(new DirectoryInfo(path)); 
    } 

    public static int FolderDepth(DirectoryInfo directory) 
    { 
     if (directory == null) 
      return 0; 
     return FolderDepth(directory.Parent) + 1; 
    } 

अच्छे दिन, अच्छा समय ...

6

मैं इस पर देर से ज्यादा कर रहा हूँ, लेकिन मैं चाहता था पॉल सोनियर का जवाब इंगित करने के लिए शायद सबसे छोटा है लेकिन

Path.GetFullPath(tmpPath).Split(Path.DirectorySeparatorChar).Length; 
संबंधित मुद्दे