.. hilfe... was mit Fwrite ;)



  • Schaut ma da:

    fwrite(pWalk->Var[i].Length() , sizeof(short) , 1, pSave);

    Kommt dieser Fehler:
    [C++ Fehler] main.cpp(246): E2034 Konvertierung von 'int' nach 'const void *' nicht möglich

    was kann ich da machen? hab schon alles ausprobiert ?

    pWalk->Var (AnsiString) 😉

    // Achja, wie man sehen kann mus das ergebnis von dem Length() die länge von short haben ^^ muss/will n short speichern!

    MFG
    Schinken



  • ok habs etz n bissl anders gemacht, aber kann mir jemand erklären warum der so n mist in die datei schreibt?

    if(fileSave->Execute())
        {
            FILE *pSave;
            pSave = fopen(fileSave->FileName.c_str(), "wb");
            pWalk = pFirst;
    
            if(pSave != NULL)
            {
    
              do{
    
                  for(int i=0;i<constArrLength;i++)
                  {
                      short sBuf = (short)pWalk->Var[i].Length();
                      fwrite(&sBuf ,sizeof(short), 1,pSave);
                      fwrite(pWalk->Var[i].c_str() , sBuf, 1, pSave);
                  }
                  pWalk   = pWalk->pNext;
    
              }while(pWalk != NULL);
    
           }else{
                 ShowMessage("Konnte Datei nicht schreiben!");
           }
    
           ShowMessage("Erfolgreich gespeichert!");
           fclose(pSave);
        }
    

    Var is n AnsiString array und ich hab mich entschlossen das so zu speichern
    [Länge][Text][Länge][Text]

    Aber sowas schreibt der rein:

    桃楲瑳灯敨ࡲ匀档物敮፲䄀捓睨摥湥牧扡湥㐠ㄹ㌳ਰ䔀杧汯桳楥๭ 㔹㔴⼠㐠㈴㜵༴ 㘱‰ 㜹〵ㄳ㠳㤰㐵‵ 㔹㔰ㄵ潫瑮歡䁴楰數浬牵敤⹲敤敍湩䬠浯敭瑮牡ء䐀湡敩٬匀档捩ᡫ嘀湯倭灡数桮楥瑓慲獳⁥Գ㤀㌱㄰ 潆捲桨楥๭㈀㤳㈹⼠㤠㤸㤸स㠀‹ 㠹㠹 㠹‹ 㠹㠹హ开牂琰着扥搮൥匀档捩業晥ⅴ

    BIn am verzweifeln!

    MFG
    Schinken



  • Hallo

    nimm statt dem fwrite lieber einen modernen Stream aus dem Standard
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39469.html
    oder aus der VCL (siehe TFileStream in der Builder-Hilfe)

    Ein Problem ist, das du nicht weist, was sizeof() macht, und was nicht.

    bis bald
    akari



  • FILE *pOpen;
    
         pOpen = fopen(fileOpen->FileName.c_str(), "rb");
         pNew = pFirst;
    
         if(pOpen != NULL)
         {
           while(!feof(pOpen))
           {
              pNew = new vk_liste;
    
              if(pFirst==NULL)
                    pFirst = pNew;
    
              if(pOld!=NULL){
                 pOld->pNext = pNew;
              }
    
              pNew->pNext = NULL;
    
              for(int i=0;i<constArrLength;i++)
              {
                 short sBuf;
                 fread(&sBuf, 1 , sizeof(short), pOpen);
                 fread(pNew->Var[i].c_str(),   1,  sBuf, pOpen);
              }
    
              pOld = pNew;
           }
    
           pLast = pNew;
    
           fclose(pOpen);
    

    Problem scheint in dieser zeile zu liegen
    fread(pNew->Var[i].c_str(), 1, sBuf, pOpen);

    (Ps: will das mit fwrite machen 😉 net mit if/ofstream!)



  • Hallo,
    versuch doch vor dem Schreiben den AnsiString in char zu wandeln. Dann kannst du sehen ob es an der Umwandlung oder dem Schreiben liegt.

    evi48



  • Oh da hab ich nicht aufgepasst.

    Mit "pNew->Var[i].c_str()" kannst du einen AnsiString in char aber nicht char in Ansistring wandeln. Du mußt "fread(charBuffer, 1, sBuf, pOpen);" einsetzen und später in AnsiString wandeln.

    evi48



  • siehe Dir nochmal akaris Post an...


Anmelden zum Antworten