कुछ फ़ोल्डरों को कैसे नेविगेट करें?


115

एक विकल्प कुछ समय में System.IO.Directory.GetParent () करने का होगा। क्या कुछ फ़ोल्डरों को यात्रा करने का एक अधिक सुंदर तरीका है जहां से निष्पादित विधानसभा रहती है?

मैं जो करने की कोशिश कर रहा हूं वह एक टेक्स्ट फ़ाइल को खोजने के लिए है जो एप्लिकेशन फ़ोल्डर के ऊपर एक फ़ोल्डर में रहता है। लेकिन असेंबली खुद बिन के अंदर होती है, जो एप्लिकेशन फ़ोल्डर में कुछ फ़ोल्डर गहरी होती है।


2
आमतौर पर एक सापेक्षिक पथ '.. \ _ \ _ \ _ \ _ डाउनफोल्डर' जैसी चाल करता है, लेकिन यह इस बात पर निर्भर करता है कि आप वास्तव में इसके लिए क्या करना चाह रहे हैं ...?
डिस्कजुनकी

क्या हमेशा ऐसा ही होता है?
CR41G14

4
"नेविगेट करें" कैसे? क्या आपका मतलब वर्तमान निर्देशिका से है? यदि हां, तो आपको करने में सक्षम होना चाहिएDirectory.SetCurrentDirectory(@"..\..\..\..");
पीटर रिची

जवाबों:


211

अन्य सरल तरीका यह है:

string path = @"C:\Folder1\Folder2\Folder3\Folder4";
string newPath = Path.GetFullPath(Path.Combine(path, @"..\..\"));

नोट यह दो स्तर ऊपर जाता है। परिणाम होगा: newPath = @"C:\Folder1\Folder2\";


18
Path.Combineजब भी आप मैन्युअल रूप से बैकस्लैश जोड़ रहे हैं तो इसका उपयोग करने का कोई मतलब नहीं है। Path.Combine(path, "..", "..")इसके बजाय उपयोग करने पर विचार करें ।
एक्सएमआईएम

32

यदि c: \ folder1 \ folder2 \ folder3 \ bin पथ है तो निम्न कोड बिन फ़ोल्डर का पथ आधार फ़ोल्डर वापस कर देगा

//string directory=System.IO.Directory.GetParent(Environment.CurrentDirectory).ToString());

string directory=System.IO.Directory.GetParent(Environment.CurrentDirectory).ToString();

यानी, c: \ folder1 \ folder2 \ folder3

यदि आप folder2 पथ चाहते हैं तो आप निर्देशिका प्राप्त कर सकते हैं

string directory = System.IO.Directory.GetParent(System.IO.Directory.GetParent(Environment.CurrentDirectory).ToString()).ToString();

तब आपको c: \ folder1 \ folder2 \ के रूप में पथ मिल जाएगा


12

आप ..\pathएक स्तर ऊपर ..\..\pathजाने के लिए , दो स्तर पथ से ऊपर जाने के लिए उपयोग कर सकते हैं ।

आप Pathक्लास का भी इस्तेमाल कर सकते हैं ।

सी # पथ वर्ग


6

यह वही है जो मेरे लिए सबसे अच्छा काम करता है:

string parentOfStartupPath = Path.GetFullPath(Path.Combine(Application.StartupPath, @"../"));

'सही' पथ प्राप्त करना समस्या नहीं थी, '../' को जोड़ना स्पष्ट रूप से है, लेकिन उसके बाद, दी गई स्ट्रिंग प्रयोग करने योग्य नहीं है, क्योंकि यह अंत में '../' जोड़ देगा। इसे चारों ओर से घेर लेने से Path.GetFullPath()आपको निरपेक्ष मार्ग मिल जाएगा, जिससे यह प्रयोग करने योग्य हो जाएगा।


4

निम्न विधि एप्लिकेशन स्टार्टअप पथ (* .exe फ़ोल्डर) के साथ शुरू होने वाली फ़ाइल खोजती है। यदि फ़ाइल वहाँ नहीं मिलती है, तो पैरेंट फ़ोल्डर तब तक खोजे जाते हैं, जब तक कि फ़ाइल नहीं मिल जाती या रूट फ़ोल्डर नहीं पहुँच जाता। nullयदि फ़ाइल नहीं मिली तो वापस कर दिया गया है।

public static FileInfo FindApplicationFile(string fileName)
{
    string startPath = Path.Combine(Application.StartupPath, fileName);
    FileInfo file = new FileInfo(startPath);
    while (!file.Exists) {
        if (file.Directory.Parent == null) {
            return null;
        }
        DirectoryInfo parentDir = file.Directory.Parent;
        file = new FileInfo(Path.Combine(parentDir.FullName, file.Name));
    }
    return file;
}

नोट: Application.StartupPathआमतौर पर WinForms अनुप्रयोगों में उपयोग किया जाता है, लेकिन यह कंसोल अनुप्रयोगों में भी काम करता है; हालाँकि, आपको System.Windows.Formsविधानसभा का संदर्भ सेट करना होगा । आप की जगह ले सकता Application.StartupPathसे
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)अगर आप पसंद करते हैं।


4

शायद आप किसी फ़ंक्शन का उपयोग कर सकते हैं यदि आप स्तरों की संख्या घोषित करना चाहते हैं और इसे फ़ंक्शन में डाल सकते हैं?

private String GetParents(Int32 noOfLevels, String currentpath)
{
     String path = "";
     for(int i=0; i< noOfLevels; i++)
     {
         path += @"..\";
     }
     path += currentpath;
     return path;
}

और आप इसे इस तरह कह सकते हैं:

String path = this.GetParents(4, currentpath);

2

सी#

string upTwoDir = Path.GetFullPath(Path.Combine(System.AppContext.BaseDirectory, @"..\..\"));

1

यह मदद कर सकता है

string parentOfStartupPath = Path.GetFullPath(Path.Combine(Application.StartupPath, @"../../")) + "Orders.xml";
if (File.Exists(parentOfStartupPath))
{
    // file found
}

1

मेरे पास कुछ आभासी निर्देशिकाएं हैं और मैं निर्देशिका विधियों का उपयोग नहीं कर सकता। इसलिए, मैंने रुचि रखने वालों के लिए एक सरल विभाजन / ज्वाइन फंक्शन बनाया। हालांकि सुरक्षित नहीं है।

var splitResult = filePath.Split(new[] {'/', '\\'}, StringSplitOptions.RemoveEmptyEntries);
var newFilePath = Path.Combine(filePath.Take(splitResult.Length - 1).ToArray());

इसलिए, यदि आप 4 को स्थानांतरित करना चाहते हैं, तो आपको अपवादों से बचने के लिए बस इसमें बदलाव 1करने 4और कुछ चेक जोड़ने की आवश्यकता है।


0

यदि आप उस फ़ोल्डर को जानते हैं जिसे आप नेविगेट करना चाहते हैं, तो इसका सूचकांक खोजें।

            var ind = Directory.GetCurrentDirectory().ToString().IndexOf("Folderame");

            string productFolder = Directory.GetCurrentDirectory().ToString().Substring(0, ind);

2
यह कई मामलों में विफल रहता है । क्या होगा यदि फ़ोल्डर का नाम सिर्फ aउदाहरण के लिए है? अगर रास्ता ऐसा दिखे तो क्या होगा C:\Folderame3\Folderame2\Folderame\...?
41686d6564

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