Wie boost filesstem einsetzen



  • Hallo,

    ich schäme mich fast für die frage...

    Was muss ich tun, damit ich boost::filesystem in meinem c++-Programm einsetzen kann?
    Muss ich die headerdatei erst downloaden?
    In den Codes wo boost:filesystem benutzt wird, steht immer

    #include "boost\filesystem\operations.hpp"
    namespace boostFS = boost::filesystem;
    

    so etwas in der Art.

    Leider kann ich hiermit wenig anfangen, gibt es nicht soetwas wie

    #include <boost>
    

    Sorry für die Anfängerfrage, aber habe bis jetzt nur mit STL zu tun gehabt.

    MfG



  • Du musst natürlich die Boost-Bibliothek zuerst herunterladen. Am besten mit einem Installer installieren, dann ist gleich alles gemacht. 😉

    ➡ www.boost.org



  • Der Link hier kam letztens von drakon. Vielleicht hilft der ja auch.
    http://www.spieleprogrammierer.de/phpBB2/viewtopic.php?t=10842



  • super, dankeschön 🙂



  • noch zwei Fragen:

    1. Was muss ich schreiben wenn ich die für meinen borland erzeugen will?
    unter Punkt 4: Boost vorbereiten im Tutorial.

    im cmd soll ich bei VisualStudio:

    bjam toolset=msvc-9.0 variant=debug variant=release threading=multi link=static
    

    eingeben und für Borland?

    wenn ich

    bjam toolset=[b]borland[/b] variant=debug variant=release threading=multi link=static
    

    eingebe, bringt er fehler und warnings...

    2. Wie kann ich den borland dann sagen wo er die libs findet?
    Bei visual wars einfach, aber borland...

    MfG



  • boost_filesystem schrieb:

    noch zwei Fragen:

    1. Was muss ich schreiben wenn ich die für meinen borland erzeugen will?
    unter Punkt 4: Boost vorbereiten im Tutorial.

    im cmd soll ich bei VisualStudio:

    bjam toolset=msvc-9.0 variant=debug variant=release threading=multi link=static
    

    eingeben und für Borland?

    wenn ich

    bjam toolset=[b]borland[/b] variant=debug variant=release threading=multi link=static
    

    eingebe, bringt er fehler und warnings...

    2. Wie kann ich den borland dann sagen wo er die libs findet?
    Bei visual wars einfach, aber borland...

    MfG

    Schau doch mal in das Installations-Manual, dort werden alle Werte für jeden Compiler aufgelistet.



  • Ja, da steht das es borland heißen muss.



  • Welchen Borland-Compiler hast du denn?
    Für den BCB2007 kann es z.Bsp. so heißen

    bjam borland --build-type=complete "--build-dir=d:/Programming/boost_org/boost_1_37_0/bcb2007" "--prefix=d:/Programming/boost_org/boost_1_37_0/bcb2007" "-sBCCROOT=C:/Programme/CodeGear/RADStudio/5_0" --with-filesystem install

    build-dir und prefix geben dabei die Verzeichnisse an wo die temporären Datein und das Ergebnis landen. sBCCROOT gibt den Pfad zum Compiler an.
    Das musst du also noch anpassen.



  • boost_filesystem schrieb:

    #include "boost\filesystem\operations.hpp"
    namespace boostFS = boost::filesystem;
    

    so etwas in der Art.

    Und ich schäme mich für meine Frage. (Muss mich als totaler Windows-Noob outen...)
    Kommt der Windows-Compiler mit Backslash "\" zurecht?!? Ich dachte immer, dass der normale Slash "/" Standard ist.

    In jedem Fall kompiliert es nicht unter Linux.



  • Mach einen Slash ("/"), dann hast du keine Probleme.

    Beim Backslash muss man berücksichtigen, dass "\" gefolgt von einem Zeichen eine Escapesequenz darstellt, von daher muss man "\\" nehmen.

    Edit: Text so verändert, dass Backslashs richtig angezeigt werden.



  • Hallo!

    Ich habe hier ein Frage, bei der Verwendung von boost::filesystem.

    Diese stellt ja ein Framework für den Dateizugriff dar, aber ich finde keine Klasse mit der ich ein File einlesen kann? Ich möchte ein jpg einlesen und dieses Framework verwenden...oder macht man das ganz normal mit fread?

    Also gibt es in boost::filesystem auch einen "Ersatz" für fread? Ich möchte irgendwie nicht das Framework verwenden und dann auf eine Basisfunktion wie fread zurückgreifen!

    Danke!



  • Das hat dann nix mehr mit boost::fileystem zu tun. Das einlesen kannst du mit der Standardbibliotheks Klassen machen. (std::ifstream).



  • OK, also für das einlesen eines jpg verwendet man kein boost und kein stl? danke! alles klar!



  • Doch naklar,man verwendet die stl, lies den Beitrag von drakon genau.



  • ok, wie weiß man dass etwas nicht zur stl gehört? fread gehört ja beispielsweise nicht dazu oder?



  • Alles was du HIER findest, gehört zur STL



  • Firefighter schrieb:

    Alles was du HIER findest, gehört zur STL

    Nicht wirklich. STL heisst ja Standard Template Library. Also ist das einfach der Teil der Standardbibliothek, der templates benutzt. Sprich damit sind normalerweise die Container und Funktionen gemeint. (und nicht der C-Teil, wie z.B cmath usw. ). Dazu kann man die stream Klassen auch noch zählen, da die ja auch templates sind. Allerdings ist der Begriff ja nicht definiert und somit nicht 100% klar, was damit gemeint ist.



  • drakon schrieb:

    Nicht wirklich. STL heisst ja Standard Template Library. Also ist das einfach der Teil der Standardbibliothek, der templates benutzt.

    Das wäre aber ein sehr grosser Teil. Streams und std::tr1::shared_ptr würde ich zum Beispiel nicht dazu zählen.

    Der Begriff ist zwar nicht genau definiert, aber meistens wird er im Zusammenhang mit den Containern, Algorithmen und Iteratoren verwendet. Auf der Seite wird die Standard Template Library meiner Meinung nach am ehesten durch folgende Links repräsentiert:
    http://www.cplusplus.com/reference/stl/
    http://www.cplusplus.com/reference/algorithm/
    http://www.cplusplus.com/reference/std/iterator/



  • Naja. Für mich schon. 😉

    Aber ich habe ja geschrieben, dass normalerweise Container und die Funktionen damit gemeint sind..



  • Noch eine Frage:

    Wenn ich folgenden dieses Struct definiere:

    typedef struct {
        unsigned short a;      //2Bytes
        unsigned int b;        //4Bytes
        unsigned int c;        //4Bytes
    } DATA_HEADER;
    

    Und dieses dann wie folgt befülle:

    DATA_HEADER header;
    ifstream file ("test.dat", ios::in|ios::binary);
    
    file.seekg (0, ios::beg);
    file.read ((char*) &header, sizeof(header));
    file.close();
    

    Kann ich mir dann sicher sein, dass die ersten zwei Bytes in header.a, die nächsten 4 Bytes in header.b usw liegen? Oder ist diese Methode eher unsicher?


Anmelden zum Antworten