2011-02-04 90 views
6

如何在不知道文件名的情況下自動打開並從C++應用程序中讀取給定目錄中的文件內容?如何使用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

你的英語並不像你想象的那樣糟糕。我已經開始注意到一種模式,即對於他們的語言能力而言足夠小心的道歉的人是那些非常小心的人,以至於他們提出的問題首先是有意義的。 – 2011-02-04 06:55:36

+2

什麼是「第一個文件」?這顯然取決於排序順序。不過你可以看看[boost :: filesystem library](http://www.boost.org/doc/libs/1_45_0/libs/filesystem/v2/doc/index.htm)。我不知道有任何標準和跨平臺的做法。 – 2011-02-04 07:03:01

回答

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,升壓適用於Unix系統和

相關問題