Как я могу автоматически открыть первый файл в папке, используя C ++? - PullRequest
6 голосов
/ 04 февраля 2011

Как я могу автоматически открывать и читать содержимое файла в данном каталоге из приложения 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;
}

Будет напечатано имя первого файла в этом каталоге. Моя проблема заключается в том, как прочитать содержимое этого конкретного файла и сохранить его в текстовом документе. Может ли ifstream сделать это? (Извините за мой плохой английский.)

Ответы [ 2 ]

5 голосов
/ 04 февраля 2011

это должно сделать

#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 голос
/ 04 февраля 2011

Если вы используете Windows, вы можете использовать FindFirstFile в Windows API. Вот краткий пример:

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 , Boost работает и для Unix-систем

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...