2013-12-13 4 views
1

У меня есть папка с iNotify. Когда файл создается в папке, наблюдатель берет файл, переименовывает его (с помощью mv) и затем переносит его в другую папку. Затем программа RapidXML вызывается с помощью сценария bash и предполагает анализ содержимого XML-файла. Программа iNotify также перезапускается после вызова скрипта программы RapidXML.RapidXML не анализируется при вызове с помощью скрипта

Итак, когда я запускаю программу RapidXML самостоятельно, она анализирует файл и делает все, что нужно. НО, когда я запускаю наблюдателя, и файл XML помещается в каталог часов, он обнаруживается, его переименовывают, он перемещается, но программа RapidXML зависает или выжимает (не уверена какая) на

doc.parse<0>(&buffer[0]); 

линия.

Вот раздел мой код программы RapidXML:

#include "xmlparser.h" 

using namespace std; 
using namespace rapidxml; 

int main(int argc, char * argv[]) 
{ 
    //variable declaration left out for space purposes 


xml_document<> doc; 
xml_node<> * root_node; 

ifstream theFile("config.xml"); 
vector<char> buffer((istreambuf_iterator<char>(theFile)), istreambuf_iterator<char>()); 
buffer.push_back('\0'); 

doc.parse<0>(&buffer[0]); 
// find the root node 
root_node = doc.first_node("configuration"); 
// iterate over the deltas 
xml_node<> * deltas_node = root_node->first_node("deltas"); 

svn = boost::lexical_cast<double>(deltas_node->first_attribute("svn")->value()); 
svd = boost::lexical_cast<double>(deltas_node->first_attribute("svd")->value()); 
    ... //other variable assignments 

xml_node<> * report_node = deltas_node->next_sibling("report"); 

optime = boost::lexical_cast<int>(report_node->first_attribute("optime")->value()); 
opstatusa = boost::lexical_cast<int>(report_node->first_attribute("opstatusa")->value()); 
... // other variable assignments 

xml_node<> * timing_node = report_node->next_sibling("timing"); 

timing = boost::lexical_cast<int>(timing_node->first_attribute("timing")); 

... // then I do some SQL stuff with the mysql cpp connector. 

Кто знает, почему он не хочет, чтобы разобрать файл XML при вызове с помощью сценария?

+0

Я заметил, что rapidxml дает сегментацию ошибка при вызове с использованием скрипта, но не при вызове с терминала! Whyyyy? –

ответ

1

Кажется, если вы хотите использовать doc.parse < 0> Команда, вы должны указать полный путь к файлу для файла, так что в моем случае:

ifstream theFile("/home/root/xmlparser/config.xml");