CREATE TABLE bloattest (mymemo m) APPEND BLANK replace mymemo with replicate("X", 5e6) USE DIR bloattest.* to FILE bloat_test.txt USE bloattest replace mymemo with replicate("X", 5) USE DIR bloattest.* to FILE bloat_test.txt ADDITIVE USE bloattest replace mymemo with replicate("X", 1e6) USE DIR bloattest.* to FILE bloat_test.txt ADDITIVEHere's what I got:
BLOATTEST.DBF BLOATTEST.FPT 5000910 bytes in 2 files. 9056681984 bytes remaining on drive. BLOATTEST.DBF BLOATTEST.FPT 5000910 bytes in 2 files. 9056665600 bytes remaining on drive. BLOATTEST.DBF BLOATTEST.FPT 6000974 bytes in 2 files. 9055666176 bytes remaining on drive.Note that the second replace didn't change the length of the files, but the third one added 10000004 (1e6 Xes added, plus 4 bytes header, with no padding overhead because 1e6 % 64=0). VFP didn't care that the originally allocated blocks for this memo were 5,000,000 bytes long - it didn't store this length anywhere permanently. It stores only the last value's length, which was 5 after the second replace. Since 1,000,000>5 and the 999,995 is longer than 61 (or 57 - whatever was supposed to fit into one block), it just added new blocks at the end of the fpt file.