2010-10-26 14 views
8

मुझे एक ऐसा प्रोग्राम करना है जहां मुझे निर्दिष्ट निर्देशिका में फ़ाइलों को अनुक्रमणित करने की आवश्यकता है। मुझे इंडेक्सिंग भाग नीचे मिल गया है, लेकिन मुझे क्या समस्या है, निर्देशिका में नेविगेट करना है। उदाहरण के लिए, जब मैं प्रोग्राम शुरू करता हूं, तो यह कहेंगे कि "आप कौन सी निर्देशिका इंडेक्स करना चाहते हैं," और फिर इनपुट "usr/दस्तावेज़/सीएस/असाइनमेंट 4" होगा, मैं "असाइनमेंट 4" निर्देशिका कैसे प्राप्त करूं ? मुझे पता है कि रिकर्सन की आवश्यकता है, लेकिन मैं वास्तव में उलझन में हूं कि निर्देशिकाएं सी में कैसे काम करती हैं। कहें कि मेरी स्रोत फ़ाइल "usr/दस्तावेज़/स्रोत कोड" में है, तो मुझे असाइनमेंट 4 प्राप्त करने के लिए क्या करना चाहिए?सी में, मैं एक निर्दिष्ट निर्देशिका कैसे प्राप्त करूं?

मुझे पता है मुझे लगता है कि मुझे लगता है कि मैं सभी उत्तरों चाहता हूं, लेकिन मैं पूरी तरह से खो गया हूं कि निर्देशिका कैसे काम करती है, और जिस पुस्तक को मैंने बेकार किया है। तो अगर आपके पास यह सब एक अच्छा ट्यूटोरियल का लिंक है, तो यह शानदार होगा।

मैं लिनक्स चला रहा हूं, उबंटू सटीक होना। जीसीसी संकलक है।

+0

उस निर्देशिका में प्रोग्राम चलाने के लिए एक सरल समाधान हो सकता है जिसे आप इंडेक्स करना चाहते हैं। लगता है जैसे आप 'ls -e' सिस्टम उपयोगिता लिख ​​रहे हैं:) – Marm0t

उत्तर

7

सी प्रोग्रामिंग भाषा में फ़ाइल सिस्टम की धारणा नहीं है। यह एक ऑपरेटिंग सिस्टम विशिष्ट सवाल है।

आपके प्रश्न में निर्देशिका की शैली के आधार पर हालांकि ऐसा लगता है कि आप एक यूनिक्स/लिनक्स शैली प्रणाली पर हैं। आप opendir समारोह के लिए देख रहे अगर ऐसी बात है तो

0

निर्देशिका का नाम केवल एक श्रृंखला है।

तो opendir ("filename"); निर्देशिका "फ़ाइल" को पढ़ना संभव बना देगा।

हालांकि आपको शायद फ़ाइल नामों और पैथ में सोचना शुरू करना चाहिए।

"यूएसआर/दस्तावेज़/स्रोत कोड" + "/../CS/Assignment4" "usr/दस्तावेज़/सीएस/असाइनमेंट 4" जैसा ही है, हालांकि मुझे लगता है कि आप अग्रणी "/" गायब हैं।

ठीक है, मुझे नहीं पता कि आप कैसे खो सकते हैं निर्देशिकाएं कैसे काम करती हैं। एक निर्देशिका विंडोज या मैक ओएस एक्स में "फ़ोल्डर" से अलग कुछ नहीं है। नीचे की रेखा में हार्ड डिस्क में एक फाइल सिस्टम है और फाइल सिस्टम केवल फ़ोल्डर्स/निर्देशिकाओं से बाहर होता है जिसमें फाइलें होती हैं (और नामांकित सॉकेट आदि जैसी विशेष फाइलें)। , आपको अभी रुचि नहीं लेनी चाहिए)।

आशा है कि इससे कम से कम थोड़ा सा मदद मिलेगी।

एंजेलो

+0

मुझे खेद है, मैंने गलत कहा। निर्देशिकाओं के काम के तरीके के रूप में खोया नहीं गया है, सी में उनके साथ कैसे काम करना है, जैसे ट्रैवर्स निर्देशिका आदि। – sx2000

1

रिकर्सिवली सी में एक निर्देशिका traversing कुछ इस तरह चला जाता है:

उपयोग opendir और readdir निर्देशिका प्रविष्टियों सूची। मुझे शायद यह नहीं करना चाहिए, लेकिन मैं एक पूर्ण कोड नमूना (सैन्स त्रुटि प्रबंधन) पोस्ट कर रहा हूं क्योंकि यह सुनिश्चित करने के लिए कि आप एपीआई का सही ढंग से उपयोग कर रहे हैं, छोटी सी चीजें हैं:

DIR   *dir; 
struct dirent *de; 
const char *name; 

dir = opendir(dirpath); 
if (dir == NULL) { 
    /* handle error */ 
} 

for (;;) { 
    errno = 0; 
    de = readdir(dir); 
    if (de == NULL) { 
     if (errno != 0) { 
      /* handle error */ 
     } else { 
      /* no more entries left */ 
      break; 
     } 
    } 

    /* name of file (prefix it with dirpath to get a usable file path) */ 
    name = de->d_name; 

    /* ignore . and .. */ 
    if (name[0] == '.' && (name[1] == '\0' || (name[1] == '.' && name[2] == '\0'))) 
     continue; 

    /* do something with the file */ 
} 

if (closedir(dir) != 0) { 
    /* handle error */ 
} 

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

यह जानने के लिए एक रास्ता एक निर्देशिका है या नहीं (और इसलिए है कि क्या आप यह opendir() चाहिए), मैं lstat() बजाय stat() उपयोग करने की अनुशंसा, बाद के रूप में सांकेतिक लिंक इस प्रकार है, अपने निर्देशिका ट्रावर्सल अर्थ एक पाश में पकड़े सकता है और आप like this ctags output के साथ समाप्त हो जाएंगे।

बेशक, चूंकि निर्देशिका संरचना प्रकृति में पुनरावर्ती है, पुनरावृत्ति ट्रैवर्सल प्रक्रिया में एक प्राकृतिक भूमिका निभाती है: एक बच्चा पथ निर्देशिका होने पर एक रिकर्सिव कॉल करें।

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

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