2013-02-01 14 views
6

मेरे पास किसी दिए गए फ़ोल्डर का पूरा पथ नाम है उदा।डेल्फी में निर्देशिका पथ हेरफेर?

c:\foo\bar 

अब मैं ग के अंदर एक फ़ाइल को संदर्भित करना चाहते हैं: \ foo नामित baz.txt,

c:\foo\bar\..\baz.txt 

मैं वर्तमान में .. पथ ऑपरेटर का उपयोग कर रहा एक स्तर नीचे जाने के लिए और फ़ाइल प्राप्त करने के लिए जिसकी मुझे आवश्यकता है।

क्या कोई ऐसा फ़ंक्शन है जो पथ कुशलताएं कर सकता है, उदाहरण के लिए UpOneLevel (str) -> str? मुझे पता है कि मैं स्ट्रिंग को विभाजित करके और अंतिम टोकन को हटाकर एक लिख सकता हूं, लेकिन मैं इसके बजाय एक अंतर्निहित/लाइब्रेरी फ़ंक्शन होगा, इसलिए यदि उदाहरण के लिए मैं बाद में परेशानी में नहीं आता बैकस्लाश से बच निकला

+0

डेल्फी का कौन सा संस्करण? हाल के संस्करण में 'IOUtils' इकाई है, जिसमें कार्यक्षमता हो सकती है; अगर आप डेल्फी के पहले संस्करण का उपयोग कर रहे हैं तो उत्तर से कुछ पोस्ट करना व्यर्थ होगा। आपको संभवतः आपके द्वारा उपयोग किए गए अन्य टैग में एक संस्करण-विशिष्ट टैग (उदाहरण के लिए, 'डेल्फी -2007,' डेल्फी-xe3', या जो कुछ भी लागू होता है) जोड़ना चाहिए। –

+0

@ केनहाइट यह डेल्फी -2007 के लिए है, क्या मैं भाग्य से बाहर हूं? – wmercer

+2

बेशक नहीं। :-) उत्तर अलग हो सकता है, लेकिन सबकुछ अभी भी संभव है। –

उत्तर

11

ExpandFileName समारोह का उपयोग करें:

var 
    S: string; 
begin 
    S := 'c:\foo\bar\..'; 
    S := ExpandFileName(S); 
    ShowMessage(S); 
end; 

ऊपर के उदाहरण से संदेश c:\foo पथ दिखाएंगी।

+3

+1। अच्छी नौकरी - मुझे एक फोन कॉल मिला, और इससे पहले कि आप वापस आ सकें, आप इसे हल कर लेंगे। :-) –

2

इस उत्तर के लिए मान्य है डेल्फी XE +

उपयोग IOutils इकाई है, जो, विधि GetParent है इस ::

uses IOUtils; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
    s: string; 
begin 
    s := 'c:\foo\bar'; 
    ShowMessage(TDirectory.GetParent(s)); 
end; 

पुराने संस्करणों

में तरह की TDirectory वर्ग

अन्य उत्तरों को देखो।

+0

IOUtils नहीं मिला, मैं डेल्फी -2007 का उपयोग कर रहा हूं। – wmercer

+0

प्रश्न स्पष्ट रूप से 'डेल्फी -2007' टैग किया गया है, जिसमें 'IOUtils' शामिल नहीं है। (मैंने मूल टिप्पणी पर मेरी टिप्पणी में इसका उल्लेख किया।) डाउनवॉटिंग नहीं, लेकिन बस उल्लेख कर रहा है। :-) –

+2

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

4

ExtractFilePath() और ExtractFileDir() पर देखें। ये केवल सभी डेल्फी संस्करणों में उपलब्ध हैं, विशेष रूप से जिनके पास टीडी डायरेक्टरी, आईओटीटी, आदि नहीं हैं

और इससे पहले कि कोई इसे कहता है, ये काम ठीक है कि पथ फ़ाइल नाम के साथ समाप्त होता है या नहीं। ForceDirectories() उदाहरण के लिए, मूल फ़ोल्डर्स के पदानुक्रम के माध्यम से पीछे की ओर चलने के लिए आंतरिक रूप से उनका उपयोग करता है।

1

आप इकाई delphi-oop लाइब्रेरी से रिकॉर्ड देख सकते हैं। यह इकाई डेल्फी 2007 का समर्थन नहीं करती है लेकिन TPathBuilder कार्यान्वयन इस डेल्फी संस्करण के साथ संगत है। उदाहरण उपयोग:

var 
    LFullPath: string; 
begin 
    LFullPath := TPathBuilder.InitCustomPath('c:\foo\bar').GoUpFolder.AddFile('baz.txt').ToString; 
    //LFullPath = c:\foo\baz.txt 
संबंधित मुद्दे