c++file-iorecordfile-pointerdelete-record

Delete record from file C++


I'm working on a simple database console application in C++ for adding, editing and deleting records in a .dat file. I have the addition and modification down, I'm just finding it hard to understand the concept of deletion in this scenario. Below is how I write a record.

Write record

fh.seekp(num*sizeof(customerObj),ios::beg); // Move the write pointer to where rec is
fh.write((char*)&customerObj,sizeof(customerObj)); // Write updated rec

Any ideas how instead of write() I could have something equivalent to delete()... or is it not that simple?


Solution

  • C and C++ don't have functions to delete parts of files. Many operating systems don't either.

    Possible options:

    1. If this is the last record, truncate the file. If not, move (=copy) all records after it, overwriting it, then truncate. Alternatively you could move (=copy) the last record to it and then truncate.

    2. Create an extra file and copy to it all records before this and after this record. Then delete the old file and rename the new file.

    3. Mark the record as unused. When writing new records check if you have any unused locations and use them first.

    4. Use a file per record.