[gelöst] [Anfänger] File Byte-weise einlesen



  • 2.) muß ich den fstream FileBin noch closen? wenn ja, wie?

    Nein. Der Stream wird automatisch geschlossen sobald er zerstört wird (d.h. wenn er aus dem Scope geht).



  • danke nochmals!

    zum problem 1) habe ich selbst nochmal was ausprobiert:

    for (int i = 0; i <80; i++)
        {
            cout<<buffer[i];
        }
    

    leider bringt das nicht das gewünschte resultat, offenbar wird ab dem ersten / nichts mehr ausgegeben... oder es ist eventuell ausserhalb der konsole?

    um das zu testen habe ich folgendes ausprobiert:

    cout<< endl;
            for (int i = 0; i <10; i++)
        {
            cout<<"0123456789";
        }
    

    Das ergebnis zeigt das 80 zeichen in die konsole passen.
    http://screencast.com/t/sKFwQNGiP



  • jetzt wird es doch noch einmal kurios...

    ich habe mich gewagt eine datei2.dat im selben verzeichnis zu erstellen (also direkt auf laufwerk s:\)

    durch herumprobieren habe ich nun herausgefunden, das ich datei2.dat so ansprechen muß:

    fstream FileBin("S:\\datei2.dat", ios::in|ios::out|ios::binary); //?
    

    wohingegen das hier nicht funktioniert:

    fstream FileBin("S:\datei2.dat", ios::in|ios::out|ios::binary); //?
    

    gleichzeitig verhält es sich bei der alten datei.dat umgekehrt, die will nur ein backslash und geht mit zweien nicht auf... ich bin mal wieder verwirrt.
    😕



  • Das "kann eigentlich nicht sein".
    Korrekt ist definitiv die Variante mit "\\" . (EDIT: argh, das Forum hatte den zweiten \ gefressen!) /EDIT
    \ leitet in C++ in String-Literalen eine Escape-Sequence ein, und "\d" ist keine gültige Escape-Sequence.

    Du solltest also zumindest eine Warnung vom Compiler bekommen. Was der Compiler dann für einen String draus macht, weiss ich nicht (keine Ahnung ob das überhaupt definiert ist, ich würde eher schätzen dass es undefiniert ist).

    Achja, nochwas:

    theta schrieb:

    BTW: das delete[] ist bei statisch allozierten Arrays nicht nötig.

    Es ist nicht nur nicht nötig, sondern es ist sogar schlichtweg falsch 😉



  • hustbaer schrieb:

    Das "kann eigentlich nicht sein".
    Korrekt ist definitiv die Variante mit "\".

    Hallo und danke für die Antwort...

    zum Thema "kann eigentlich nicht sein" habe ich ein kurzes Video gemacht, weil ich nicht weiß wie ich es sonst zeigen soll:

    http://screencast.com/t/lVxGkL7h

    Gruß
    **
    EDIT:**
    um die Verwirrung um die Backslashes zu kompletieren, ist mir noch etwas hier im forum aufgefallen: ich mache mal zwei screenshots:

    http://screencast.com/t/jL325x8v6

    http://screencast.com/t/rb4SzERo9Ww

    EDIT2:

    vielleicht sollte ich mal paar daten dazugeben:

    OS: Windows7 professional 64bit

    ich verwende codeblocks 10.05 als compiler

    und firefox 7.0 als browser für das forum hier

    die datei.dat wurde jedoch auf einem 32 bit Windows 2000 System erstellt.
    die datei1.dat habe ich hier erstellt.



  • 🙄 doppelt gepostet, sorry

    hustbaer schrieb:

    Das "kann eigentlich nicht sein".
    Korrekt ist definitiv die Variante mit "\".

    Hallo und danke für die Antwort...

    zum Thema "kann eigentlich nicht sein" habe ich ein kurzes Video gemacht, weil ich nicht weiß wie ich es sonst zeigen soll:

    http://screencast.com/t/lVxGkL7h

    Gruß
    **
    EDIT:**
    um die Verwirrung um die Backslashes zu kompletieren, ist mir noch etwas hier im forum aufgefallen: ich mache mal zwei screenshots:

    http://screencast.com/t/jL325x8v6

    http://screencast.com/t/rb4SzERo9Ww

    EDIT2:

    vielleicht sollte ich mal paar daten dazugeben:

    OS: Windows7 professional 64bit

    ich verwende codeblocks 10.05 als compiler

    und firefox 7.0 als browser für das forum hier

    die datei.dat wurde jedoch auf einem 32 bit Windows 2000 System erstellt.
    die datei1.dat habe ich hier erstellt.



  • hustbaer schrieb:

    Achja, nochwas:

    theta schrieb:

    BTW: das delete[] ist bei statisch allozierten Arrays nicht nötig.

    Es ist nicht nur nicht nötig, sondern es ist sogar schlichtweg falsch 😉

    Mir fehlten die richtigen Worte. 😉



  • Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum C++ (auch C++0x) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Danke fürs Verschieben.

    ich habe die Frage in einem englisch sprachigen Beginners Forum auch gestellt, dort meint jetzt jemand:

    After watching the video, I can only say that your Windows is broken. Or your C++ compiler, or your STL for that compiler. Try other compilers. Try Visual Studio.

    zwei fragen:
    kann er damit wirklich recht haben? wenn ja, wie teste ich das?

    und hat sich jemand die screenshots angeschaut, bin ich der einzige der im forum doppelbackslashes nicht sehen kann (zeigt nur einen an) aber in den vorschauen (also jetzt zum beispiel unten bei Themen-Überblick) dann doch?



  • ARGH
    Ich sehe gerade, das Forum mag doppelte \ nicht - und frisst die bei der Darstellung. Sorry!

    Also: Korrekt ist definitiv die Variante mit "\\" . Also doppelt. Zwei Stück. Einer und noch einer 😃



  • Achja...
    Schreib mal die verschiedenen String-Varianten (mit einem und mit zwei Backslash) in die Konsole.
    Dann weisst du zumindest was dein Compiler aus dem \d macht.



  • hustbaer schrieb:

    ARGH
    Ich sehe gerade, das Forum mag doppelte \ nicht - und frisst die bei der Darstellung. Sorry!

    puh und ich war wirklich am zweifeln ob mein windows broken ist, wie der in dem anderen forum meint.
    danke! hätte ich nicht erwartet, das das in einem Forum in dem \ und \\ so wichtig sind der Fall ist.

    hustbaer schrieb:

    Achja...
    Schreib mal die verschiedenen String-Varianten (mit einem und mit zwei Backslash) in die Konsole.

    http://screencast.com/t/8yeAkOWQW90d

    sieht für mich so aus, wie es erklärt wurde, wieso ich damit datei.dat finde ist mir immernoch ein rätsel.

    ich habe inzwischen microsoft visual c++ 2010 express installiert, damit lässt sich datei.dat überhaupt nicht mehr öffnen wenn diese auf S: liegt... in einem unterverzeichnis geht es dann mit zwei backslash. datei2.dat geht auch direkt auf S: mit MSVC++2010Express (allerdings mit 2 backslashes) 😕

    als Anfänger verunsichert mich das jetzt schon ziemlich, wenn ich nichtmal sicher eine datei öffnen kann, die defnitiv da ist. denn mein erstes projekt sollte eigentlich ein datei interpreter bzw konverter werden 🙄

    EDIT:

    Gerade hat es bei mir klick gemacht! Der Fehler / das Phenomen kam daher das es im projektverzeichnis eine kopie von datei.dat aber keine von datei2.dat gab, also hat S:\datei.dat nicht die datei auf s sondern die im projektordner geöffnet. codeblocks scheint in dem Fall das S: zu ignorieren im gegensatz zu microsoft. Es ist also alles gut und ich kann mein Projekt doch in Angriff nehmen!

    danke für die Hilfen - ich komme bestimmt wieder 👍



  • nelphin schrieb:

    EDIT:

    Gerade hat es bei mir klick gemacht! Der Fehler / das Phenomen kam daher das es im projektverzeichnis eine kopie von datei.dat aber keine von datei2.dat gab, also hat S:\datei.dat nicht die datei auf s sondern die im projektordner geöffnet. codeblocks scheint in dem Fall das S: zu ignorieren im gegensatz zu microsoft. Es ist also alles gut und ich kann mein Projekt doch in Angriff nehmen!

    danke für die Hilfen - ich komme bestimmt wieder 👍

    Nene. Codeblocks ignoriert das "S:" nicht.

    Codeblocks ignoriert nur den einfachen "\" wenn danach ein "d" kommt, der Pfad wird zu "S:datei.dat".

    Da greift dann eine Eigenheit von Windows, nämlich dass jedes Laufwerk sein eigenes "current directory" hat. Und dieses spricht man genau mit so einem Pfad an, also ohne Backslash nach dem ":".


Anmelden zum Antworten