Есть куча однотипного файлА, содержимое которых надо последовательно мапить в память, да потом еще и процессить. Есть снипет на прибустованных крестах для сей благородной цели: в текущей директории, в лексикографическом порядке, все файлы с расширением .zzz отображаются в память для чтения, а дальше с ними ничего не происходит – но можно добавить вызов вашей функции.
#include <boost/filesystem.hpp>
#include <boost/interprocess/file_mapping.hpp>
#include <boost/interprocess/mapped_region.hpp>
using boost::interprocess;
/****** ... and somewhere at very important program ***********/
const boost::filesystem::path base_dir (".");
std::string extension (".zzz");
for (boost::filesystem::directory_iterator it (base_dir); it != boost::filesystem::directory_iterator (); ++it)
{
boost::filesystem::path p = it->path ();
if(boost::filesystem::is_regular_file (it->status ()) && boost::filesystem::extension (it->path ()) == extension)
{
//mapping & processing
file_mapping file_mapper(it->path().string(), read_only);
mapped_region mapped_reg(file_mapper, read_only);
double * double_pointer = (double *)mapped_reg.get_address();
size_t elements = region.get_size()/sizeof(double);
// to get name only without extension
string fname =boost::filesystem::basename (p);
}
}
на голом std мапинг содержимого файла сразу в вектор можно сделать вот эдак:
ifstream input_data_stream("file_with_data.bin");
// Determine the file length
input_data_stream.seekg(0, ios_base::end);
size_t size=is.tellg();
input_data_stream.seekg(0, ios_base::begin);
// Create a vector to store the data
vector<int> vector_of_int(size/sizeof(int));
// Load the data
input_data_stream.read((int*) &vector_of_int[0], size);
// Close the file
input_data_stream.close();