开发者

How can I automatically open the first file in a folder using C++?

How can I automa开发者_如何转开发tically open and read the content of a file within a given directory from a C++ application without knowing the file's name?

For example (a rough description of the program):

#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;
}

This will print the name of the first file in that directory. My problem is how to read that particular file's content and save it in a .txt document. Can ifstream do that? (Sorry for my bad English.)


this should do it

#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;
}


If you're on Windows you can use the FindFirstFile in the Windows API. Here is a short example:

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));

Otherwise I'd go with ayushs answer, Boost works for unix systems as well

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜