File nach buffer schreiben



  • Hallo,

    ich möchte einen File in einen Buffer schreiben.

    char buffer[4096];
         HANDLE filehandle;
         filehandle = CreateFile("lcd_test.bin", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,       FILE_ATTRIBUTE_NORMAL, NULL);
         if(filehandle == INVALID_HANDLE_VALUE)
         {
             Application->MessageBox("FILE NOT FOUND"," ",MB_OK | MB_ICONERROR);
         }
         else
         {
             DWORD dwFileSize;
             dwFileSize = GetFileSize(filehandle, NULL);
             DWORD dwFileRead;
              if(!ReadFile(filehandle, buffer, dwFileSize, &dwFileRead, NULL))
              {
                   Application->MessageBox("READ ERROR"," ",MB_OK | MB_ICONERROR);
              }
              else
              {
                   Application->MessageBox("OK"," ",MB_OK | MB_ICONERROR);
              }
         }
    

    Ich habe nun aber keinen Speicher allociert, ?muss ich das?, es funkt auch
    so. Und wenn ja wie allociert man Speicher?
    Und wozu dient dwFileRead?



  • hermes schrieb:

    Ich habe nun aber keinen Speicher allociert

    hast du wohl:

    char buffer[4096];
    

    du hast Speicherplatz auf dem Stack für 4096 Zeichen reserviert.

    es funkt auch so

    weil deine Testdatei weinige als 4096 Zeichen enthält.

    besser:

    int dwFileSize = GetFileSize(filehandle, NULL);
             char* buffer =new char[dwFileSize];
    


  • [quote="AndreasW"]

    hermes schrieb:

    du hast Speicherplatz auf dem Stack für 4096 Zeichen reserviert.

    Danke für den Hinweis.

    Liegt der Speicher deswegen im Stack weil dem Programm beim Start automatisch 4096 Byte für den Stack zugewiesen wird und das ist halt dann der zur verfügung stehende Speicher.

    Muss ich den Speicher vor beenden des Programms wieder freigeben oder
    geschieht dies automatisch?



  • hermes schrieb:

    Muss ich den Speicher vor beenden des Programms wieder freigeben oder geschieht dies automatisch?

    Hi,
    wenn du

    char buffer[CONST];
    

    schreibst wird der Speicher automatisch wieder freigegeben...
    Bei:

    char *buffer = new char[VAR];
    

    musst du den Speicher wenn er nicht mehr benötigt wird mit

    delete[] buffer;
    

    wieder freigeben...

    Regel: Bei allen Klassen (außer den VCL Klassen mit Owner != NULL) mussen immer genau so viele deletes wie news da sein!

    MfG

    Alexander Sulfrian



  • Ein Hinweis.

    In diesem Fall hätte die Freigabe mit

    delete[] buffer;
    

    zu erfolgen.

    Ciao



  • Hi,
    stimmt natürlich.... 🤡
    Ich sollte so spät nicht mehr versuchen zu proggen....

    MfG

    Alexander Sulfrian


Anmelden zum Antworten