Wie benutze ich eine QFile mit std :: iostream?

8

Ist es möglich, ein QFile wie ein std :: iostream zu verwenden? Ich bin mir ziemlich sicher, dass da draußen ein Wrapper sein muss. Die Frage ist wo?

Ich habe eine andere Bibliothek, die einen std :: isorem als Eingabeparameter benötigt, aber in meinem Programm habe ich nur eine QFile an diesem Punkt.

    
Andreas Roth 05.03.2011, 14:19
quelle

4 Antworten

5

Ich habe meine eigene Lösung gefunden (die dieselbe Idee verwendet, die Stephen Chu vorgeschlagen hat)

%Vor%

Ausgabe:

%Vor%

Dieser Code verwendet den Konstruktor std :: ifstream move (C ++ - Funktion x0), der im Abschnitt 27.9.1.7 basic_ifstream-Konstruktoren von Arbeitsentwurf, Standard für Programmiersprache C ++ :

  

basic_ifstream(basic_ifstream&& rhs);
  Effekte: Verschiebe Konstrukte aus dem   rvalue rechts Dies wird erreicht durch   Bewegen Sie den Aufbau der Basisklasse und   das enthaltene basic_filebuf. Nächster   basic_istream :: set_rdbuf (& amp; sb) wird aufgerufen, um das Enthaltene zu installieren   basic_filebuf.

Siehe Zurückgeben eines Stream (C ++ 0x) zur Diskussion zu diesem Thema.

    
Piotr Dobrogost 05.03.2011, 19:27
quelle
6

Ich habe mit dem folgenden Code eine eigene Lösung gefunden:

%Vor%

Ich kann problemlos lokale Dateien lesen. Ich habe es nicht zum Schreiben von Dateien getestet. Dieser Code ist sicherlich nicht perfekt, aber es funktioniert.

    
Andreas Roth 05.03.2011 18:17
quelle
4

Wenn das QFile-Objekt, das Sie erhalten, nicht bereits zum Lesen geöffnet ist, können Sie einen Dateinamen daraus abrufen und ein ifstream-Objekt öffnen.

Wenn es bereits geöffnet ist, können Sie Dateihandle / Deskriptor mit handle() abrufen und von dort gehen Dort. Es gibt keine portable Möglichkeit, einen Stream vom Plattformgriff zu bekommen. Sie müssen einen Workaround für Ihre Plattformen finden.

    
Stephen Chu 05.03.2011 16:47
quelle
0

Wenn Ihnen die Leistung nicht so wichtig ist, können Sie immer alles aus der Datei lesen und in ein std::stringstream speichern und dann an Ihre Bibliothek übergeben. (Oder umgekehrt, alles in einen Stringstream puffern und dann in eine QFile schreiben)

Abgesehen davon sieht es nicht so aus, als könnten die beiden zusammenarbeiten. In jedem Fall sind Interaktionen von Qt zu STL oft ein Grund für obskure Fehler und subtile Inkonsistenzen, wenn die Version von STL, mit der Qt kompiliert wurde, in irgendeiner Weise von der Version von STL abweicht, die Sie verwenden. Dies kann zum Beispiel passieren, wenn Sie die Version von Visual Studio ändern.

    
shoosh 05.03.2011 14:30
quelle

Tags und Links