I am writing a program in C++ where I have 500 folders, each containing one text file. I want to read each text file from each folder in C++.
How can I accomplish this?
I am writing a program in C++ where I have 500 folders, each containing one text file. I want to read each text file from each folder in C++.
How can I accomplish this?
The C++ Standard does not specify any directory functions, so you will have to use something implementation-specific. For example, on Windows you can use the chdir()
function. declared in <direct.h>
.
BTW, please note it's a good idea to indicate which operating system(s) you are interested in when posting questions like this.
You don't want to change dir, but just open them to read their entries ( see opendir() )
Usually I find it easier to handle the complete path than rely on the process's current directory.
If you want a neat and portable way to access files and directories, look no further than Boost.Filesystem. You should browse through the documentation to find exactly what you need. Below is a suggestion of how you could use the framework to get things done.
#include <iostream>
#include <filesystem>
using std::tr2::sys;
using std::cout;
void do_something_with_file( std::string const& p )
{
std::cout << "Found file : " << p << std::end;
}
void explore_directory( std::string const& p )
{
for (directory_iterator itr(p); itr!=directory_iterator(); ++itr)
{
if( is_directory(itr->status()) )
{
explore_directory(itr->path().filename());
}
else if( is_regular_file(itr->status()) )
{
do_something_with_file(itr->path().filename());
}
}
}
int main(int argc, char* argv[])
{
std::string p(argc <= 1 ? "." : argv[1]);
if (is_directory(p))
{
explore_directory(p);
}
else cout << (exists(p) : "Found: " : "Not found: ") << p << '\n';
return 0;
}