2014-11-20 2 views
0

내 XML 파일의 루트 요소가 내 프로그램의 생성자에 QDomElement이어야합니다.파일이 없으면 XML 파일을 읽거나 루트 요소로 새 파일을 만듭니다.

이 경우 프로그램은 먼저 파일을 읽으려고합니다. 파일을 읽을 수 없으면 루트 요소를 사용하여 새 파일을 만듭니다. 이 후 내 파일의 루트 요소를 얻습니다.

bool hadToCreateXML=false; 
bool wasLoadedCorrectly=false; 
fileXML.setFileName("C:/logs.xml"); 
if(!fileXML.open(QIODevice::ReadOnly | QIODevice::Text)){ 
    cout << "fail open, file does not exsist?" << endl; 
    if(!fileXML.open(QIODevice::WriteOnly | QIODevice::Text)){ 
     cout << "failed creating file" << endl; 
    } 
    else{ 
     ui->outputText->append("First time running"); 
     hadToCreateXML=true; 
     QDomDocument tempFirstTime; 
     tempFirstTime.setContent(&fileXML); 
     tempFirstTime.createElement("MyRoot"); 
     QTextStream stream(&fileXML); 
     stream << tempFirstTime.toString(); 
     fileXML.close(); 
    } 
} 
else wasLoadedCorrectly=true; 

if(hadToCreateXML||wasLoadedCorrectly){ 
    if(!documentXML.setContent(&fileXML)){ 
     cout << "failed to load doc" << endl; 
    } 
    else { 
     rootXML=documentXML.firstChildElement(); 
     fileXML.close(); 
    } 
} 

그것은 더러워 보이는 의도 한대로 불행하게도이 작동하지 않습니다 다음

이 내 코드입니다. 파일이 존재하지 않으면 생성되지만 루트 요소는 추가되지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 이 같은

답변

1

사용 무언가 :

QFile fileXML; 
bool hadToCreateXML=false; 
bool wasLoadedCorrectly=false; 
fileXML.setFileName("G:/logs.txt"); 
    if(!fileXML.open(QIODevice::WriteOnly | QIODevice::Text)){ 
     qDebug() << "failed creating file" << endl; 
    } 
    else{ 
     hadToCreateXML=true; 
     QDomDocument tempFirstTime; 
     //tempFirstTime.setContent(&fileXML); don't use 
     tempFirstTime.appendChild(tempFirstTime.createElement("MyRoot")); 
     QTextStream stream(&fileXML); 
     stream << tempFirstTime.toString(); 
     qDebug() << "data "<< tempFirstTime.toString(); 
     fileXML.close(); 
    } 

실수 : 당신이 WriteOnly으로 파일을 열하지만 setContent를 호출하려고, 당신은 금지되어, 파일을 읽어보십시오.

QIODevice::read: WriteOnly device

이 또한 확인 QFile::exists()을 사용하여 파일이 존재한다 : 당신은 다음 디버그 오류가 발생합니다.

그래서 당신의 코드를해야 뭔가 같은 :

if(fileXML.exists()) 
    //read 
else 
    //write 

http://qt-project.org/doc/qt-5/qfile.html#exists-2

관련 문제