Array aus Datei lesen



  • Hi,

    ich habe ein problem mit einem array, das ich aus einer datei lesen will. es ist zu groß um es auf einmal zu lesen. wenn ich aber die komponenten einzeln einlesen will, und diese ausgebe, kommt nach einiger zeit müll raus. hier mal mein quelltext, den ich mal zum testen gemacht habe:

    int d[128];
        for(int i= 0; i< 128;i++)
            d[i]=i;
    
        ofstream f("test.txt");
    
        f.write((char*)&d, sizeof(d));
    
        f.close();
    
        ifstream g;
        g.open("test.txt");
    
        int b;
        for(int i = 0; i< 128;i++)
        {
            g.read((char*)&b, sizeof(b));
            Memo1->Lines->Add(b);
        }
        g.close();
    

    was am ende in Memo1 steht is merkwürdig:
    0
    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
    25
    25 und noch mehr 25 bis zum ende.

    kann mir jemand helfen?????? wieso is das so?

    danke schon mal 🙂



  • Du solltest mal überprüfen, ob das Lesen überhaupt erfolgreich war:

    while(g.read((char*)b,sizeof(b)))
      Memo1->Lines->Add(b);
    


  • das lesen ist dann nicht mehr erfolgreich...
    nach 25 hört er auf. aber wieso??



  • Wie groß ist denn die Datei, die du hinten herausbekommen hast?
    (außerdem solltest du dir mal ansehen, welches Fehlerflag gesetzt wurde (eof(), fail(), bad()))

    PS: Nur am Rande: Wenn du Binärdaten verarbeitest, solltest du die Datei als ios::binary öffnen



  • also die datei hat 513kb und fail() ist 1, und wenn ich die datei mit ios::binary oeffne, wird mehr ausgelesen:
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    2573
    2816
    3072
    3328
    3584
    3840
    4096
    4352
    4608
    4864
    5120
    5376
    5632
    5888
    6144
    6400
    6656
    6912

    aber wie man sieht ist das nicht besser. ich hab keine ahnugn wieso aus der datei nich gelesen werden kann. wenn ich das array aus diesem test komplett wieder einlese, klappt es. aber wie gesagt, es kommt ein overflow wenn ich es mit dem großen versuche.


Anmelden zum Antworten