«

»

Sep 19

С++ – обход всех файлов в папке и мапинг в память

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

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>