Das Lesen und schreiben von Binär-Datei in C++

Ich brauche, um eine Datei mit "name" ist ein string -array von char - und "Daten", die Byte-array -array von char in C++, aber das erste problem, das ich konfrontiert ist, wie zu trennen die "Namen" aus den "Daten"? newline-Zeichen arbeiten konnte in diesem Fall (unter der Annahme, dass ich nicht "\n" im Namen), aber ich konnte Sonderzeichen in den "data" - Teil, also es gibt keine Möglichkeit zu wissen, Wann es endet, also ich bin putting einen int-Wert in die Datei, bevor die Daten, die die Größe des "Daten"!
Ich habe versucht, dies mit den code wie folgt:

if((fp = fopen("file.bin","wb")) == NULL)
{
    return false;
}
char buffer[] = "first data\n";
fwrite( buffer ,1,sizeof(buffer),fp );
int number[1];
number[0]=10;
fwrite( number ,1,1, fp );
char data[] = "1234567890";
fwrite( data , 1, number[0], fp );
fclose(fp);

aber ich wusste nicht, ob die "int" - Teil war richtig, also habe ich versucht, viele andere codes, einschließlich dieser:

char buffer[] = "first data\n";
fwrite( buffer ,1,sizeof(buffer),fp );
int size=10;
fwrite( &size ,sizeof size,1, fp );
char data[] = "1234567890";
fwrite( data , 1, number[0], fp );

Sehe ich 4 "NULL" - Zeichen in der Datei, wenn ich es öffnen statt zu sehen, eine ganze Zahl. Ist das normal?
Das andere problem, das ich bin vor ist zu Lesen, dass wieder aus der Datei! Der code, den ich versuchte zu Lesen, hat überhaupt nicht funktioniert 🙁 ich habe es versucht mit "fread", aber ich bin mir nicht sicher, ob ich es verwenden soll "fseek" mit, oder es einfach Lesen, die anderen Zeichen nach.

Dachte ich an die Verwendung einer Klasse wie folgt und dann schreiben und Lesen Sie es zurück:

class Sign
{
public:
char* name;
int size;
char* data;
};

aber das war nicht eine einfache Sache, die in C++ !!

Ich habe auch versucht, die folgenden:

void saveData(char* filename) {

    fstream filestr;
    int n;
    n=10;
    char* data= "1234567890";

    filestr.open (filename, fstream::out | fstream::binary);
    for (int j = 0; j<5 ; j++)
    {
       filestr << n;

       for (int i = 0; i < n; i++) {
            filestr << data[i];
       }
    }
    filestr.close();
}

void readData(char* filename) {
    fstream filestr;
    int n =0;

    filestr.open (filename, fstream::in | fstream::binary);
    int m =0;
    //while(!filestr.eof())
    while(m<5)
    {
        filestr >> n;

        char *data = new char[n];
        for (int i = 0; i < n; i++) {
            filestr >> data[i];
        }
        printf("data is %s\n",data);
        m++;
    }
    filestr.close();
}

Aber das Lesen hat nicht funktioniert entweder.

Auf zu Lesen, ich bin immer seltsame Zeichen.


Bisher der code, der bei mir funktioniert ist:

void saveData(char* filename) {
    fstream filestr;
    char * name = "first data\n";
    int n;
    n=10;
    char* data= "asdfghjkl;";

    filestr.open (filename, fstream::out | fstream::binary);
    for (int j = 0; j<5 ; j++)
    {
        filestr << name;
        filestr << strlen(data);
        filestr << data;
    }
    filestr.close();
}


void readData(char* filename) {
    fstream filestr;
    int n =0;

    filestr.open (filename, fstream::in | fstream::binary);
    while(!filestr.eof())
    {
        string name;
        getline(filestr,name,'\n');
        printf("name is %s\n",name.c_str());

        filestr >> n;

        char *data = new char[n];
        for (int i = 0; i < n; i++) {
            filestr >> data[i];
        }
        printf("n is%d\ndata is %s\n",n,data);
    }
    filestr.close();
}

aber die Probleme im Lesen sind:

1- (ich glaube nicht, dass es ein echtes problem) es gibt andere Zeichen in das neben den eigentlichen Daten.
2 - auf readData Funktion bekomme ich die Ausgabe 6 mal (in der letzten Zeit bekomme ich jedes Feld als leeres Feld), während ich geschrieben habe, nur 5 mal! Weiß jemand warum das so ist? ist die mit while(!filestr.eof()) ??

Danke für die Hilfe

Ich habe versucht, das Lesen von Daten mithilfe der readData Funktion habe ich gerade geschrieben, aber ich habe die Ausgabe von printf, die als "code ist asdfghjkl;2222▌▌1US\♀+", wenn Daten char* data= "asdfghjkl;",, jemand weiß, warum das so ist?

InformationsquelleAutor Reem | 2010-05-01

Schreibe einen Kommentar