2011-02-04 7 views
6

मैं फ़ाइल के नाम को जानने के बिना किसी सी ++ एप्लिकेशन से किसी दिए गए निर्देशिका में किसी फ़ाइल की सामग्री को स्वचालित रूप से कैसे खोल और पढ़ सकता हूं?मैं C++ का उपयोग कर फ़ोल्डर में पहली फ़ाइल को स्वचालित रूप से कैसे खोल सकता हूं?

उदाहरण के लिए (कार्यक्रम का एक मोटा वर्णन):

#include iomanip  
#include dirent.h  
#include fstream 
#include iostream 
#include stdlib.h 

using namespace std; 

int main()    
{ 
     DIR* dir;             
     struct dirent* entry;           
     dir=opendir("C:\\Users\\Toshiba\\Desktop\\links\\");   
     printf("Directory contents: ");        

     for(int i=0; i<3; i++)          
     { 

      entry=readdir(dir);          
      printf("%s\n",entry->d_name);       
     } 
     return 0; 
} 

यह है कि निर्देशिका में पहली फ़ाइल का नाम प्रिंट होगा। मेरी समस्या यह है कि उस विशेष फ़ाइल की सामग्री को कैसे पढ़ा जाए और इसे .txt दस्तावेज़ में सहेजें। ifstream कर सकते हैं? (मेरा बुरा अंग्रेजी के लिए खेद है।)

+7

आपका अंग्रेजी के रूप में बुरा के रूप में आपको लगता है नहीं है। मैंने एक पैटर्न को नोटिस करना शुरू कर दिया है कि जो लोग अपने भाषा कौशल के लिए माफ़ी मांगने के लिए पर्याप्त सावधान हैं वे वही हैं जो पर्याप्त सावधानी बरतते हैं कि वे जो भी पूछते हैं वह पहली जगह में समझ में आता है। –

+2

"पहली फ़ाइल" क्या है? यह स्पष्ट रूप से सॉर्टिंग ऑर्डर पर निर्भर करता है। आप [बूस्ट :: फाइल सिस्टम लाइब्रेरी] (http://www.boost.org/doc/libs/1_45_0/libs/filesystem/v2/doc/index.htm) को देखना चाहेंगे, हालांकि। मुझे ऐसा करने के लिए किसी मानक और क्रॉस-प्लेटफॉर्म से अवगत नहीं है। –

+0

मेरा मतलब था कि आपके पास एक फ़ोल्डर है जिसमें हजारों फाइलें हो सकती हैं। और मैं उस फ़ोल्डर में फ़ाइलों को एक-एक करके पढ़ने के लिए केवल सी ++ का उपयोग करके एक प्रोग्राम लिखने की कोशिश कर रहा हूं और इसकी सामग्री को .txt दस्तावेज़ में कॉपी करता हूं और फिर इसे सहेजता हूं। ये प्रक्रिया प्रोग्राम द्वारा स्वचालित रूप से की जाएगी। तो उपयोगकर्ता को क्या करना है बस कार्यक्रम को निष्पादित करना है। – FCX

उत्तर

5

यह

#include <iostream> 
#include <boost/filesystem/operations.hpp> 
#include <boost/filesystem/fstream.hpp> 
using namespace boost::filesystem; 
using namespace std; 

void show_files(const path & directory, bool recurse_into_subdirs = true) 
{ 
    if(exists(directory)) 
    { 
    directory_iterator end ; 
    for(directory_iterator iter(directory) ; iter != end ; ++iter) 
     if (is_directory(*iter)) 
    { 
     cout << iter->native_directory_string() << " (directory)\n" ; 
     if(recurse_into_subdirs) show_files(*iter) ; 
    } 
    else 
     cout << iter->native_file_string() << " (file)\n" ; 
    copyfiles(iter->native_file_string()); 
    } 
} 

void copyfiles(string s) 
{ 
    ifstream inFile; 

    inFile.open(s); 

    if (!inFile.is_open()) 
    { 
    cout << "Unable to open file"; 
    exit(1); // terminate with error 
    } 
    //Display contents 
    string line = ""; 

    //Getline to loop through all lines in file 
    while(getline(inFile,line)) 
    { 
    cout<<line<<endl; // line buffers for every line 
     //here add your code to store this content in any file you want. 
    } 

    inFile.close(); 
} 
int main() 
{ 
    show_files("/usr/share/doc/bind9") ; 
    return 0; 
} 
1

आप Windows पर हैं, तो आप Windows API में FindFirstFile उपयोग कर सकते हैं करना चाहिए। यहाँ एक छोटी उदाहरण है:

HANDLE myHandle; 
WIN32_FIND_DATA findData; 
myHandle = FindFirstFile("C:\\Users\\Toshiba\\Desktop\\links\\*", &findData); 
do { 
    if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){ 
     cout << "Directoryname is " << findData.cFileName << endl; 
    } 
    else{ 
     cout << "Filename is " << findData.cFileName << endl; 
    } 
} while (FindNextFile(myHandle, &findData)); 

अन्यथा मैं ayushs answer साथ जाना चाहते हैं, बूस्ट यूनिक्स प्रणालियों के लिए काम करता है और साथ ही

+1

कोड के लिए धन्यवाद। यह काम करता हैं। मुझे एक और समस्या है। प्रोग्राम खोलने और फ़ाइल को पढ़ने के बाद, मैं फ़ाइल का उपयोग कर फ़ाइल को एक निर्देशिका में दूसरे स्थानांतरित करने में असमर्थ हूं ("OldDirectory NewDirectory" को स्थानांतरित करें)। क्योंकि मेरे पास उस फ़ाइल का नाम नहीं है जिसे मैं स्थानांतरित करने जा रहा हूं। क्या कोई तरीका है कि मैं findData.cFileName का उपयोग कर सकता हूं जैसा कि आपने कोड में उल्लेख किया है कि मेरी फ़ाइल को नए स्थान पर ले जाएं लेकिन उसी फ़ाइल नाम को बनाए रखें? क्षमा करें अगर मेरा प्रश्न उलझन में है। – FCX

+0

'cFileName' फ़ाइल के लिए पूर्ण पथ नहीं है, इसलिए आपको उस निर्देशिका को सेट करना होगा जहां फ़ाइल आपकी [कार्यशील निर्देशिका] पर स्थित है (http://msdn.microsoft.com/en-us/library /aa365530(VS.85).aspx), या फ़ाइल नाम के साथ निर्देशिका को सम्मिलित करें और इसे 'OldDirectory' के रूप में उपयोग करें। इसके अलावा, सिस्टम का उपयोग करने और विंडोज एपीआई का उपयोग जारी रखना चाहते हैं, [MoveFile] (http://msdn.microsoft.com/en-us/library/aa365239 (VS.85) .aspx देखें) – Default

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

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