फ़ाइल नाम सहित पथ से फ़ाइल नाम के बिना पूर्ण पथ प्राप्त करें


198

वहाँ कुछ भी बनाया है System.IO.Pathकि मुझे सिर्फ filepath देता है?

उदाहरण के लिए, यदि मेरे पास ए string

@ "C: \ वेबसर्वर \ सार्वजनिक \ mycompany \ कॉन्फ़िगरेशन \ promo.xml",

क्या कोई बीसीएल विधि है जो मुझे देगी

"C: \ वेबसर्वर \ सार्वजनिक \ mycompany \ कॉन्फ़िगरेशन \"?



एफडब्ल्यूआईडब्ल्यू: मैंने "पथ" के हैंडलिंग पर "छोड़ दिया" है और हम यूएनसी के साथ बेहतर उम्मीदों और एकरूपता के साथ अपने स्वयं के तरीकों का उपयोग करते हैं (यूएनसी पथ पर गेटडायरेरीनाम का उपयोग करने की कोशिश करें) और सम्मेलनों (जैसे। अनुगामी /)।
user2864740 3

जब तक फ़ाइल या निर्देशिका मौजूद नहीं है, तब तक यह जानने का कोई तरीका नहीं है कि promo.xmlफ़ाइल या निर्देशिका को उसी नाम से डिज़ाइन करता है या नहीं। जो शायद इसीलिए Path.GetDirectoryName()लागू किया जाता है कि यह इतना सरल है और सिर्फ आखिरी खंड को काटता है, या एक होने पर पीछे चल रहे स्लैश को हटा देता है।
हाबिल

जवाबों:


241

Path.GetDirectoryName()... लेकिन आपको यह जानना होगा कि आप जिस रास्ते से गुजर रहे हैं, उसमें एक फ़ाइल नाम है; यह केवल पथ से अंतिम बिट को निकालता है, चाहे वह फ़ाइल नाम या निर्देशिका नाम हो (वास्तव में इसका कोई पता नहीं है)।

यदि आपको कॉल करने की आवश्यकता है, तो आप पहले परीक्षण File.Exists()और / या Directory.Exists()अपने पथ पर पहले मान्य कर सकते हैंPath.GetDirectoryName


2
कॉल करने की कोई आवश्यकता नहीं है File.Exists()। वास्तव में, यह उस स्थिति में प्रति-उत्पादक है जहां निर्देशिका नाम खोजने का आपका कारण इसे बनाना है यदि यह पहले से मौजूद नहीं है।
जॉन हैना

3
उनका उदाहरण स्पष्ट रूप से एक फ़ाइल नाम के साथ एक पथ नोट करता है। यदि वह उन रास्तों का पैटर्न है जो वह परीक्षण कर रहा है, और यदि वे रास्ते मौजूदा फ़ाइलों का प्रतिनिधित्व करते हैं, तो File.Exists () निश्चित रूप से उपयोगी होगा, क्या आप सहमत नहीं होंगे? क्योंकि स्थिति अन्यथा हो सकती है, ज़ाहिर है, मैं सिर्फ सुझाव दे रहा था कि वह 'फ़ाइल और / या निर्देशिका पर मौजूद तरीकों का उपयोग कर सके'; जाहिर है, उसकी स्थिति के लिए उपयुक्त है।
एंड्रयू बार्बर

हाँ, फ़ाइल नाम के साथ एक पथ। फ़ाइल के नाम में पहले से मौजूद कुछ भी नहीं है, क्योंकि फ़ाइल नाम पहले आते हैं।
जॉन हन्ना

4
जैसा मैंने कहा; यह एक विकल्प है और यह पथ के बारे में ज्ञात के आधार पर मदद कर सकता है। या यह आवश्यक नहीं हो सकता है। लेकिन एक ही पथ पर File.Exists () और Directory.Exists () का परीक्षण करना यह जानने का एक त्वरित और आसान तरीका है कि क्या कोई पथ, जो मौजूद है, एक फ़ाइल या निर्देशिका है।
एंड्रयू बार्बर

5
एक त्वरित संदर्भ के रूप में, प्रश्न के साथ अतिरेक में, और "स्पष्ट" उपचार, आपको System.IOकाम करने के लिए इसे शामिल करने की आवश्यकता है ।
क्रेगॉक्स

70
Console.WriteLine(Path.GetDirectoryName(@"C:\hello\my\dear\world.hm")); 

2
यह सबसे अच्छा है। using System.IO;पथ विधियों का उपयोग करना याद रखें
सिंटैक्स त्रुटि

ध्यान दें कि इसमें एक अनुगामी स्लैश (एक जोड़ने के लिए इसका तुच्छ) शामिल नहीं है
मिंगवेई सेमुएल

51

Path.GetDirectoryName()निर्देशिका नाम लौटाता है, तो आप क्या चाहते हैं (अनुगामी रिवर्स सॉलिडस चरित्र के साथ) जिसे आप कॉल कर सकते हैं Path.GetDirectoryName(filePath) + Path.DirectorySeparatorChar


12
    string fileAndPath = @"c:\webserver\public\myCompany\configs\promo.xml";

    string currentDirectory = Path.GetDirectoryName(fileAndPath);

    string fullPathOnly = Path.GetFullPath(currentDirectory);

currentDirectory: c: \ webserver \ public \ myCompany \ configs

fullPathOnly: c: \ webserver \ public \ myCompany \ configs


6
कृपया इस उत्तर को बेहतर बनाने के लिए प्रश्न के उत्तर के रूप में कुछ जानकारी प्रदान करें।
एरिक हॉएन्स्टीन

1
Path.GetFullPath फ़ाइल नाम के बिना पूर्णपथ लौटाता है।
कोबी विलियम्स

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

आउटपुट होगा -> c: \ webserver \ public \ myCompany \ configs
कोबी विलियम्स

5

दिखाए गए अनुसार 'GetParent ()' का उपयोग करें, अच्छी तरह से काम करता है। आपको आवश्यकतानुसार त्रुटि जाँच जोड़ें।

var fn = openFileDialogSapTable.FileName;
var currentPath = Path.GetFullPath( fn );
currentPath = Directory.GetParent(currentPath).FullName;

4

मैंने इसका इस्तेमाल किया और यह अच्छी तरह से काम करता है:

string[] filePaths = Directory.GetFiles(Path.GetDirectoryName(dialog.FileName));

foreach (string file in filePaths)
{   
    if (comboBox1.SelectedItem.ToString() == "")
    {
        if (file.Contains("c"))
        {
            comboBox2.Items.Add(Path.GetFileName(file));
        }
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.