Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: C++ (auch C++0x und C++11) ::  File schreiben mit Boost IoStreams und Filesystem     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Gast_321
Unregistrierter




Beitrag Gast_321 Unregistrierter 21:14:25 08.05.2012   Titel:   File schreiben mit Boost IoStreams und Filesystem            Zitieren

Hallo,

ich habe eine Frage, und zwar möchte ich gerne Daten die in einem char* Buffer stehen in ein File schreiben. Da ich mich endlich mal näher mit Boost befassen möchte bin ich dabei auf Boost.IoStreams und Boost.Filesystem gestoßen.

Entwicklungsumgebung Windows mit dem Embarcadero C++ Builder XE.

Und nun zu dem eigentlichen Problem. Prinzipiell kann ich die Daten in ein File schreiben. Allerdings ist bei einer Buffergröße > 4096 Bytes Schluss. D.h. da steht dann einfach nicht mehr drin in dem File.

Unten stehend der Code. Anstelle von byteweise schreiben mit "writer.put(...)" hatte ich auch schon "writer.write( pSrc, dwLength );" probiert (also um die Daten in einem Rutsch zu schreiben). Es macht keinen Unterschied, mehr als 4096 geht nicht.

Beim Debuggen habe ich gesehen dass in der IoStream Implementierung von Dinkumware die verfügbare Größe des Streams abgefragt wird, diese Variable enthält diesen Wert (also die 4096).

Wie kann ich diesen Wert anpassen? Ich verstehe ehrlich gesagt überhaupt nicht warum es hier scheinbar eine defaultmäßige Größenbeschränkung gibt. Ich will den "writer" ja benutzen um in ein File zu schreiben und normalerweise weiß ich ja zum Zeitpunkt des Schreibens nicht zwangsläufig die Größe.

Unten stehend der Code. Würde mich über Hilfe freuen.

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include "stdafx.h"
 
#include <boost/filesystem.hpp>
#include <boost/filesystem/fstream.hpp>
#include <boost/iostreams/device/file.hpp>
#include <boost/iostreams/stream.hpp>
#include <boost/iostreams/filtering_stream.hpp>
 
namespace boostio = boost::iostreams;
 
int _tmain(int argc, _TCHAR* argv[])
{
    try
    {
        boostio::stream_buffer<boostio::file_sink> myFile( "c:/hello.txt" );
        std::ostream writer( &myFile );
        for( int i = 0; i < 10 * 1024; i++ )
        {
            writer.put( 'X' );
        }
 
        myFile.close();
    }
    catch( ... )
    {
    }
 
 
    return 0;
}
TyRoXx
Mitglied

Benutzerprofil
Anmeldungsdatum: 30.06.2009
Beiträge: 1034
Beitrag TyRoXx Mitglied 12:08:59 09.05.2012   Titel:              Zitieren

In der Datei kommt nicht alles an? Könnte daran liegen, dass du die Datei schließt, bevor du den Puffer von writer leerst. Einfach das völlig sinnfreie und hier (vermutlich) sogar falsche close weglassen.

_________________
.. aber dann wäre C++ uneinheitlich und nicht mehr so anfängergerecht.


Zuletzt bearbeitet von TyRoXx am 12:32:37 09.05.2012, insgesamt 1-mal bearbeitet
c++.de :: C++ (auch C++0x und C++11) ::  File schreiben mit Boost IoStreams und Filesystem   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.