/* * W1Store.cc * * Created on: Oct 31, 2010 * Author: lamikr */ #include #include #include #include #include #include #include #include #include #include "W1Store.hh" using namespace std; using namespace w1; std::string W1Store::location = "/tmp/"; W1Store::W1Store() { // TODO Auto-generated constructor stub } W1Store::~W1Store() { // TODO Auto-generated destructor stub } void W1Store::set_location(string location_param) { string::size_type pos; location = location_param; pos = location.find_last_of("/"); if (pos != location.length()) { location = location + "/"; } } void W1Store::store(std::string device_id, std::list *string_list) { string file_path; string text_line; time_t wtime; struct tm *ltime; char buffer[80]; string year; string month; string date; time(&wtime); ltime = localtime(&wtime); strftime(buffer, 80, "%Y", ltime); year = buffer; strftime(buffer, 80, "%m", ltime); month = buffer; strftime(buffer, 80, "%Y-%m-%d", ltime); date = buffer; struct tm * gmtime(const time_t *timer); struct tm * localtime(const time_t * timer); struct stat st; file_path = location + year; if (stat(file_path.c_str() ,&st) != 0) { mkdir(file_path.c_str(), 0755); } file_path = file_path + "/" + month; if (stat(file_path.c_str() ,&st) != 0) { mkdir(file_path.c_str(), 0755); } file_path = file_path + "/" + device_id + "_" + date + ".txt"; ofstream data_file(file_path.c_str(), ios::app); cout << "storing to " << file_path << ", data size " << string_list->size() << endl; // TODO: add mutex to protect string_list while it's read and emptied if (data_file.is_open()) { while(string_list->size() > 0) { text_line = string_list->front(); string_list->pop_front(); if (text_line.length() > 0) { cout << "storing line: " << text_line << endl; data_file << text_line << endl; } } data_file.close(); } else { cout << "could not open file " << file_path << " for writing data." << endl; } }