Problem mit TinyXML
-
Die doc.ErrorDesc() sagt:
0x00047d70 {size=19 capacity=19 str="Failed to open file"}
Sehr hilfreich dieser Error report...
-
Ich kenn micht mit TinyXML nicht aus, aber kannst du ein XML aus einem String erzeugen? Dann könntest du wenigstens erkennen, ob der Inhalt der XML Datei korrekt und well-formed ist, nicht dass TinyXML das nicht parsen kann und daher einen Fehler meldet.
-
Leg die Datei mal in nen anderen Ordner (mit möglichst wenig Zugriffsbeschränkungen und einem kurzen Pfad ohne Leerzeichen) und versuchs nochmal mit nem absoluten Pfad.
Bekommst du dieselbe Fehlermeldung, wenn du einen ungültigen Pfad angibst?
-
Kannst du die Datei mit std::ifstream öffnen? Falls ja, kompilier mal die TinyXML-Sourcen mit (anstatt gegen die Lib zu linken) und debugge LoadFile. Falls nein, stimmt was mit dem Pfad nicht, Zugriffsberechtigungen könnten tatsächlich ein Anlaufpunkt sein.
-
Mein Compiler kennt std::ifstream nicht! Welche Bibliothek muss ich dafür einbinden?
Ich benutzte schon den kürzesten Pfad (C://demo.xml).
Wenn ich eine Datei (mit Pfad) angebe, die de facto nicht vorhanden ist, erscheint die gleiche Fehlermeldung...! Im Umkehrschluss heißt das, er findet die Datei nicht?! Oder sind die Fehlermeldungen nicht weiter aufgeschlüsselt (also nur fail und success)?
@docShoe: Die XML stammt aus einem Tutorial, außerdem habe ich schon mehrere getestet (aus verschiedenen Tutorials). Normalerweise müsste diese XML lesbar sein.
-
Neulinger schrieb:
Mein Compiler kennt std::ifstream nicht! Welche Bibliothek muss ich dafür einbinden?
Ich benutzte schon den kürzesten Pfad (C://demo.xml).
Wenn ich eine Datei (mit Pfad) angebe, die de facto nicht vorhanden ist, erscheint die gleiche Fehlermeldung...! Im Umkehrschluss heißt das, er findet die Datei nicht?! Oder sind die Fehlermeldungen nicht weiter aufgeschlüsselt (also nur fail und success)?
@docShoe: Die XML stammt aus einem Tutorial, außerdem habe ich schon mehrere getestet (aus verschiedenen Tutorials). Normalerweise müsste diese XML lesbar sein.
Hallo
#include <fstream>C:/demo.xml ist vllt gerade das Problem, kopiere die Datei lieber auf eine andere Partion, ab Windows Vista hat man sehr eingeschränkte Berichtigungen auf der System Partition.
Achja / musst du nicht verdoppelt nur den \ muss verdoppelt werden!
Was natürlich noch sein kann, ist das deine Codierung der Datei nicht passt. Hatte ich als Problem, zB Datei war in Unicode gespeichert aber Informationen wurde als ANSI erwartet.
Achja hier zB ein kleiner Schnipsel bei UTF8 codierten XML-Dateien der funktioniert:
string filename = "D:\\user.xml"; TiXmlDocument* _document = null; _document = new TiXmlDocument(); _document->LoadFile( filename, TIXML_ENCODING_UTF8 );MfG Marc-o
-
Ja, er scheint die Datei nicht öffnen zu können, das XML kann es auf jeden Fall parsen.
std::ifstream ist aus der C++-Standardbibliothek, folgendes Stückchen versucht die Datei zu öffnen:
#include <fstream> #include <iostream> #include <iterator> #include <string> using namespace std; int main() { ifstream File( "C:\\temp\\demo.xml" ); noskipws( File ); if ( File ) cout << "Kann Datei problemlos öffnen:\n" << string( istream_iterator<char>(File), istream_iterator<char>() ) << endl; else cout << "Kann Datei nicht öffnen" << endl; }
-
Wenn ich #include <fstream> benutze, kommt es bei mir zu einer Vielzahl an Fehlern. Ich gehe davon aus, dass mein Windows Embedded Image dies nicht unterstützt.
Ein absoluter Pfad kann bei mir nicht funktionieren, da ich über einen Virtual PC
debugge, der eben meine Datei auf C: gar kennt, geschweige denn zugreifen kann...Kann ich die demo.xml auch in mein Projekt einbinden und aus dem Projekt heraus (als Resource) aufrufen?
-
Ich habe es geschafft, dass die demo.xml gefunden wird! Dafür musste ich die Datei in meinem Image platzieren (was bei wechselnder xml Datei nervig wird...).
Kann ich die demo.xml nicht in VS2008 als Resource einbinden und von da aus aufrufen??? Wie könnte ich die Datei sonst im VS2008 platzieren?
-
Ja, du kannst die Datei als Resource einbinden und dann extrahieren.
Du musst dafür eine .rc-Datei anlegen und darin deine xml-Datei angeben, das Format der Datei weiß ich aber im Moment nicht - eventuell mal im "Compiler und IDE" Unterforum nachfragen. Die XML-Datei liegt dadurch in deiner exe-Datei, mit den WinAPI-Funktionen FindResource usw kannst du sie dann da rausholen und unter C:/demo.xml (oder wo auch immer) abspeichern, danach mit TinyXML öffnen.