2009-11-02 9 views
11

मुझे पार्सिंग कमांड लाइन तर्कों के साथ मदद करने के लिए बहुत सारी लाइब्रेरी मिली हैं, लेकिन उनमें से कोई भी फ़ाइल नामों को संभालने से निपटने में प्रतीत नहीं होता है। अगर मुझे कमांड लाइन पर "../foo" जैसे कुछ मिलता है, तो मैं फ़ाइल के पूर्ण पथ को कैसे समझूं?मैं फ़ाइल नाम कमांड लाइन तर्क के लिए पूर्ण पथ कैसे प्राप्त करूं?

+7

आपको क्यों लगता है कि आपको फ़ाइल के पूर्ण पथ की आवश्यकता है? Syscalls सापेक्ष पथ के साथ बस ठीक काम करते हैं। –

+0

मेरा मानना ​​है कि 'pwd' कमांड आपको अपना वर्तमान पथ/स्थान देता है। आपको बाकी को समझने में सक्षम होना चाहिए ... लेकिन एंड्रयू (ऊपर टिप्पणी) सही है। –

+1

मेरी उपयोगिता कुछ पाठ फ़ाइलों को उत्पन्न करती है इसलिए मुझे पूरा पथ चाहिए। पथ बनाना एक दर्द की तरह लगता है, यह पहले से ही 1000 बार हल किया जाना चाहिए। –

उत्तर

15

POSIX realpath() है।

#include <stdlib.h> 
char *realpath(const char *filename, char *resolvedname); 

वर्णन
realpath() समारोह, निकला से पथ की ओर इशारा किया फ़ाइल नाम, एक निरपेक्ष पथ नाम है कि नाम एक ही फाइल, जिसका संकल्प को शामिल नहीं करता द्वारा "।" " .. ", या प्रतीकात्मक लिंक। जेनरेट किया गया पथनाम अधिकतम {PATH_MAX} बाइट तक संग्रहीत किया जाता है, बफर में द्वारा हल किए गए पर इंगित किया गया है।

+0

संपादन के लिए धन्यवाद, जोनाथन; और विशेष रूप से सारांश के लिए। – pmg

19

आप अपने relative path से एक फ़ाइल की absolute path प्राप्त करने के लिए, boost::filesystem इस्तेमाल कर सकते हैं:

namespace fs = boost::filesystem; 
fs::path p("test.txt"); 
fs::path full_p = fs::complete(p); // complete == absolute 
std::cout << "The absolute path: " << full_p; 
+4

fs :: पूर्ण (पी) V3 – KindDragon

1

शैल स्क्रिप्ट में, "readlink -f" कमांड में realpath() की कार्यक्षमता है।

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