X-Git-Url: http://pilppa.org/gitweb/?a=blobdiff_plain;f=src%2FW1Store.cc;h=a6bbaa0b1be78a7ee650fcfa4e7d5061c20139dd;hb=03b2099858fb9e87e316eb10a0f684e3fdb27a46;hp=98015832e4f042098caa06b0958c41f7db55d155;hpb=80cdda7a07fe93c3f701c562f960081fa9376187;p=lib1wire.git diff --git a/src/W1Store.cc b/src/W1Store.cc index 9801583..a6bbaa0 100644 --- a/src/W1Store.cc +++ b/src/W1Store.cc @@ -11,6 +11,10 @@ #include #include +#include +#include +#include +#include #include "W1Store.hh" @@ -28,21 +32,57 @@ W1Store::~W1Store() { } 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) { +void W1Store::store(std::string device_id, std::list *string_list) { - string file_path = location + device_id + ".txt"; + string file_path; string text_line; - ofstream data_file(file_path.c_str(), ios::app); - cout << "storing to " << file_path << ", data size " << string_list.size() << endl; + 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(); + 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;