2013-02-08 15 views
5

मुझे निर्देशिका से फ़ाइलों को खोलने में कठिनाई हो रही है जो exe की तुलना में अलग फ़ोल्डर में है। मैंने एक फाइल पढ़ने में कामयाब रहा है। लेकिन प्रोग्राम का उपयोग कर लूप में निर्देशिका में मौजूद कई फाइलें कैसे पढ़ें।निर्देशिका से एकाधिक फ़ाइलों को पढ़ना

एकल फाइल प्रसंस्करण के लिए इस्तेमाल किया कोड के नीचे है:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main() 
{ 
    FILE *fp, *tp, *tl; 
    char str_buff[1024] = { FALSE }; 
    char str[125]; 
    char strlengths[MAX_NO_OF_STRINGS]= { FALSE }; 
    //int Result; 
    //int string_startflag = FALSE; 
    int string_cntr = FALSE,i = 0, n = 0; 

    fp = fopen("D:/folder/language/stringEnglish.h", "r"); 
    tp = fopen("New Text Document.txt", "w"); // open the file to Write 
    tl = fopen("New Length Document.txt", "w"); // open the file to Write lengths 

    while (NULL != fgets(str_buff, sizeof(str_buff), fp)) 
    { 
     sscanf(str_buff, "%*[^\"]%*c%[^\"]%*c%*[^\n]%*c", str); 

     //printf("%s\n", str); 

     if (string_cntr > 6) 
     { 
      if (string_cntr<= MAX_NO_OF_STRINGS) 
      { 
       fprintf(tp, "%s\n", str); 
       strlengths[i] = strlen(str); 
       i++; 
      } 
     } 
     string_cntr++; 
    } 

    for(n=0;n<(MAX_NO_OF_STRINGS-6);n++) 
    { 
     fprintf(tl,"%d\n",strlengths[n]); 
    } 

    fclose(fp); 
    fclose(tp); 
    fclose(tl); 

    return 0; 
} 

तो मैं फ़ाइल में चर पार्स और तार की लंबाई प्राप्त करने के लिए फ़ाइल पर कार्रवाई करने में सक्षम हूँ।

stringItalian.h,stringLatvian.h,stringSlovakian.h,stringSlovenian.h,stringSpanish.h,stringSwedish.h,stringTurkish.h,stringUkrainian.h 

मैं कैसे एक पाश में इन नामों में से फ़ाइलें खोल सकते हैं: समस्या कैसे एक से अधिक फ़ाइलों को खोलने के लिए मैं के रूप में फ़ोल्डर भाषा में फ़ाइल नाम है?

क्या सामान्य रूप से फ़ोल्डर D:/folder/language फ़ोल्डर का मार्ग देने का कोई तरीका है?

अग्रिम धन्यवाद।

उत्तर

0

आप पथ अपने कार्यक्रम में एक कमांड लाइन तर्क के रूप में अपने मूल्य को पढ़ने argv[1] से अगर यह पहला तर्क है, तो आप पढ़ना चाहते हैं अलग अलग फ़ाइलों के माध्यम से पाश है गुजारें सकता,:

int main(int argc, char* argv[]) 
{ 
    ... 
    const char* files[] = {"stringItalian.h", "stringLatvian.h", 
          "stringSlovakian.h", "stringSlovenian.h", 
          "stringSpanish.h", "stringSwedish.h", 
          "stringTurkish.h", "stringUkrainian.h"}; 
    int i; 
    char fullpath[256]; 

    for (i=0; i<sizeof(files)/sizeof(files[0]); i++) { 
     strcpy(fullpath, argv[1]); 
     strcat(fullpath, files[i]); 
     fp = fopen(fullpath, "r"); 
+0

धन्यवाद, यह निश्चित रूप से मेरी मदद करेगा। इस विधि को आजमाएं – tanve3r

0

मेरा सुझाव है फ़ाइल के वास्तविक पार्सिंग को एक अलग फ़ंक्शन में डालने से शुरू करने के लिए, ताकि आप उस फ़ंक्शन को केवल फ़ाइल नाम से कॉल कर सकें।

सबसे आसान बात फ़ाइल नामों के साथ एक टेबल होना चाहिए, और इस तालिका के माध्यम से लूप आपके द्वारा बनाए गए फ़ंक्शन को फ़ाइल नाम दे रहा है।

+0

धन्यवाद, आप function.simonc का उपयोग कर पार्सिंग करेंगे, एक अच्छा उदाहरण प्रदान करेगा इसे फ़ंक्शन का उपयोग करके मर्ज करेगा – tanve3r

0

आप फ़ंक्शन के अंदर कार्यक्षमता डालने के द्वारा प्रोग्राम को फिर से लिख सकते हैं प्रक्रियाफाइल (char * fileName) और फिर पूर्ण पथ फ़ाइल नामों के साथ फ़ंक्शन को कॉल करें।

processFile("D:/folder/language/stringEnglish.h"); 
processFile("D:/folder/language/stringItalian.h"); 

इसके अलावा, आप एक फ़ाइल में संसाधित करने और उस फ़ाइल में लाइनों पर पाश करने के लिए कार्यक्रम को फिर से लिखने और फ़ाइल नाम यह पाता है साथ समारोह कॉल करने के लिए फ़ाइल नाम डाल सकता है।

0

जैसा कि सिमोनक ने कहा है कि आप argv के माध्यम से .h के पथ को दे सकते हैं, लेकिन समस्या यह है कि यह अभी भी आवश्यक है कि आप संकलन-समय पर .h के नामों को जानते हों।

मुझे लगता है कि आप से अधिक लूप करना चाहते हैं .h निर्देशिका में है। वहाँ पुस्तकालयों आप इस पार मंच (इन कीवर्ड के लिए खोज) करते हैं कि कर रहे हैं, या आप इसे अपने ओएस पर रवानगी कर सकते हैं:

  • लिनक्स: ->dirent

  • विंडोज: FindFirstFile FindNextFile - >msdn

    (या, एक छोटे से hackish लेकिन हो सकता है आप के लिए बहुत आसान: पहली बार उपयोग प्रणाली()/ls * एक .txt फ़ाइल में ज, तो पढ़ा है कि dir करने के लिए)

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