Есть куча однотипного файлА, содержимое которых надо последовательно мапить в память, да потом еще и процессить. Есть снипет на прибустованных крестах для сей благородной цели: в текущей директории, в лексикографическом порядке, все файлы с расширением .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();