CFile::GetLength



  • Hi,

    ich habe folgenden Code:

    //CFile file ... (Test.txt)
    //#define FOOBAR 12;
    
    int length file.GetLength(); // gibt 21 zurück
                                 // Tatsächlich sind 17 Zeichen in der Datei
    char* pBuf = new char[length+1];
    pBuf[length] = NULL;           //Scheinbar wird NULL nicht automatisch gesetzt!?
    file.ReadHuge(pBuf,length);
    
    for(int i=0;i<(length-FOOBAR);i++)
    {
       pBuf[i] = pBuf[i+FOOBAR];  //ich schaufel die letzten  Zeichen nach vorne
    }
    pBuf[length-FOOBAR] = NULL;  //den unnützen rest vom array abschneiden
                                 //muss ich u.u. noch eleganter machen
    // wieder in Datei schreiben
    

    So mein Problem ist jetzt das file.Getlength() nicht die anzahl der Zeichen zurückgibt sondern die länge in bytes. da ich aber die zahlen 21 und 17 in keine Beziehung bringen kann bin ich etwas verwirrt, wie ergibt sich da die Zahl 21, bzw wie kann ich mir die Länge der Datei holen und mit ihr rechnen?

    um der Frage vorzubeugen, die Textdatei nehm ich nur zum testen da es sich leicht nachschauen lässt ob was am test anders geworden ist, es werden also auch nicht Textdateien verwendet.



  • In Windows wird das Zeichen '\n' durch zwei Zeichen ("\r\n" - oder war's umgekehrt?) dargestellt, dadurch düfte sich die Differenz erklären.



  • sind \r und/oder \n mit in der Datei?



  • Nein es gibt keinen Zeilenumbruch in der Datei

    aber ich hab den Fehler gefunden allerdings versteh ich ihn nicht.

    Ich habe mit
    #define FOOBAR 12

    ein Symbol definiert und benutze es um den jetzigen Wert der Datei zu berechnen
    Sobald ich aber damit rechne kommen unsinnige Werte heraus
    Bsp.:

    //length = 17
    //FOOBAR = 12
    int old_length = length - FOOBAR; //ergibt 21
    

    wohingegen

    //length = 17
    //FOOBAR = 12
    int old_length = FOOBAR;
    old_length = length - old_length; // ergibt 5
    

    kann man nicht mit Symbolkonstanten rechnen oder wo liegt der Fehler?


Anmelden zum Antworten