Files Byteweise einlesen



  • Warum musst du es Zeichenweise einlesen?
    Kannst den Stream auch komplett einlesen und einfach in der mitte teilen.

    🙂



  • Original erstellt von <NAOMI>:
    **aber damit ich dieses File splitten kann muss ich es Zeichen für Zeichen einlesen oder Byte-weise.

    Files bitweise einlesen: ofstream file1(name, ios::binary);
    while(file1.get(ch)){
    file2.set(ch);
    }

    // ch = char Element**

    Ein Zeichen ist ein Byte. Ein char ist ein Byte. Mit ifstream.get() liest du also genau ein Byte.

    Aber wieso du jedes Byte einseln lesen willst, versteh ich nicht.



  • Original erstellt von DrGreenthumb:
    Ein Zeichen ist ein Byte.

    😮
    wchar_t zeichen = L'a';
    liefer mir bei sizeof 2 stimmt was mit meinem compiler nicht
    😮



  • Original erstellt von Lars:
    blabla

    Ich hab _char_ geschrieben. Im Sinne von einem C++-char.

    [ Dieser Beitrag wurde am 20.06.2003 um 00:53 Uhr von DrGreenthumb editiert. ]



  • wchar_t is laut meinem schlauen buch auch C++ Standart! nur halt 2 Byte, stimmt schon, Lars. Is halt Unicode. 🙂
    *nochmalnachgesehenhab*
    Ist definiert wie ein unsigned int, laut einer quelle ist es aber implementierungsabhängig und kann auf einem 64Bit System auch 64Bit belegen(?).
    Für letzteres will ich aber jetzt nicht meine Hand ins Feuer legen.

    [ Dieser Beitrag wurde am 21.06.2003 um 02:52 Uhr von THE_FreaK editiert. ]



  • char und wchar_t.
    Wenn du jetzt einen unterschied findest, bekommst du 100 Punkte.



  • Autsch.

    char ist 1 Byte
    TCHAR ist 2 byte (UNICODE)

    TCHAR brauchast du, wenn du z.B. einen japanischen Text in der Datei hast.

    履き嫌い門戸至極穂か井戸

    Pro jap. Zeicen z.B. 2 char.
    Im HTML Code steht aber &# 192123; (mit einer anderen Zahl (ohne Leerzeichen weil das Forum ersetzt das sonst)), weil das hier ein deutsches Forum ist.
    Auf japanischen Seiten wird man aber feststellen, dass ein bestimmter Header gesetzt ist, deswegen werden jeweils 2 Chars zu einem Zeichen zusammengepflückt.
    Dann muss man auch ein japanisches Sprachpaket installiert haben, worauf man auch aufgefordert wird.

    Soviel zu UNICODE.

    PS: Unicode gibt es natürlich auch bei mehreren Sprachen, Chinesisch z.B. russisch nutzt aber AFAIK nur 1char Code.

    MfG MAV

    [ Dieser Beitrag wurde am 21.06.2003 um 12:27 Uhr von Mis2com editiert. ]



  • TCHAR sollte bestimmt WCHAR heißen in deinem Beitrag. TCHAR ist nämlich nur 2 bytes groß, wenn UNICODE definiert ist.



  • @Mis2Com:
    1. TCHAR kann sowohl 1 als auch 2 bytes belegen - und ist glaub windows-spezifisch
    2. Unicode kann 1, 2 oder 4 bytes belegen. Obwohl es da evtl. noch andere Varianten gibt.

    übrigens: wchar_t ist _nicht_ garantierterweise Unicode. genauso, wie char nicht notwendigerweise Ascii is (kann ja auch EBCDIC sein :D)



  • Original erstellt von <NAOMI>:
    **Vielen Dank, aber damit ich dieses File splitten kann muss ich es Zeichen für Zeichen einlesen oder Byte-weise.

    Files bitweise einlesen: ofstream file1(name, ios::binary);
    while(file1.get(ch)){
    file2.set(ch);
    }

    // ch = char Element

    Wenn ich ein File einlese dass ca. 5MB gross ist, so dauert dies ca. 30sec!!**

    ????????? dann machst du was falsch..... ich hab vor kurzem mal 'nen Filesplitter geschrieben, der splittet 700 MB in knapp 1. Minute (PC mit 1,4 Ghz)... d.h. er liest 700 MB byte-Weise ein und schreibt sie anschliessend wieder gesplittet.... wenn's dich interessiert, Quellcode findest du hier: http://www.bluetiger.ch.vu/getfile.php?section=coding&file=blueFileSplitter.php


Anmelden zum Antworten