0
所以我們基本上要閱讀由一些不同的細分我們的節目的文本文件:閱讀複雜的文件配對<串,對<地圖<字符串,字符串>字符串>> C++
在結構方案是一個高速緩存與:對數據>>
在文件中的結構(均密鑰被用作既密鑰和段之間的分隔符)
key
headerKey : headerValue
headerKey : headerValue
......................
headerKey : headerValue
key
data
data
...
data
key
我們一直在努力此使用讀取以下,但它不讀取日期格式(RFC1123)。我們只將headerValues中的日期定爲「08 Gmt」或類似的「XX gmt」。什麼是錯在我們的閱讀算法,下面是我們正在使用:作爲分隔符,但它出現在日期格式不同的含義,即分割時間:
try{
// Create stream
ifstream ifs(this->cacheFile.c_str(), ios::binary);
// Read file to cache if stream is good
if(ifs.good()){
while (! ifs.eof()){
map<string,string> headerPairs;
string tmp;
string key;
string data;
getline(ifs, tmp);
while(tmp.empty()){
getline(ifs, tmp);
cout << "Empty line..." << "\n";
if(ifs.eof()){
cout << "End of File.."<< "\n";
break;
}
}
//After empty lines get "Key"
key = tmp;
getline(ifs, tmp);
//Get segment of header pairs
while(tmp != key){
StringTokenizer headerPair(tmp, ":", StringTokenizer::TOK_TRIM);
//StringTokenizer::Iterator it = headerPair.begin();
std::cout << *(headerPair.begin()) <<": " << *(headerPair.end()-1)<< std::endl;
string headerKey = *(headerPair.begin());
string headerValue = *(headerPair.end()-1);
headerPairs.insert(make_pair(headerKey, headerValue));
getline(ifs, tmp);
}
cout << "Added " << headerPairs.size() << " header pairs from cache" << "\n";
//tmp equals Key
while(tmp!=key){
getline(ifs, tmp);
cout << "Searching for header->data delimiter" << "\n";
}
cout << "Found header->data delimiter" << "\n";
//Get segment of data!
getline(ifs, tmp);
while(tmp != key){
data+=tmp;
getline(ifs, tmp);
}
cout << "DATA: " << data << "\n";
cout << "Ending delimiter:" << tmp << "\n";
this->add(key,make_pair(headerPairs, data));
cout << "Added: " << key << " to memory-cache" << endl;
}
ifs.close();
}
}
catch (Exception &ex){
cerr << ex.displayText() << endl;
}
請建議得到一個更好的辦法日期字符串:
DateTime now : Mon, 29 Apr 2013 08:15:57 GMT
DateRetrieved from file: 57 GMT
簡言之:問題是,我們使用的是:作爲頭一個分隔符,我想爲另一個分隔符星座的故障保護的建議,即它不會在HTTP中找到1.0或1.1頭。
根據[this](http://stackoverflow.com/questions/4400678/http-header-should-use-what-character-encoding)標題要包含一些跡象。我們決定在文件中使用這個(✰)特殊字符來分隔標題✰ – 2013-04-29 09:51:31
@DavidKarlsson但是如果用戶在數據字段中使用這個字符呢?這仍然是不安全的。 – 2013-04-29 10:25:12
StringTokenizer僅用於標題段,該段使用多字符鍵與其他段分隔開......因此,數據段不受該字符的拆分// BR – 2013-04-29 10:44:28