Preserve the evidence before recovery
Blank FoxPro memo fields do not automatically mean that the text was erased. The DBF may still contain usable pointers while the wrong FPT was selected, the original companion is stored elsewhere, or the reader has not recognized the dialect. Begin with copies of the entire application data directory, not just the two files that seem relevant.
Create cryptographic checksums if the archive is important, make a second working copy and write down every test. Recovery becomes unreliable when files are repeatedly renamed or modified without a record of which versions were paired.
Check the structure in a fixed order
- Confirm memo fields in the DBF. Inspect the field list for memo, general or binary-capable types associated with the FoxPro variant.
- Find all candidate FPT files. Search backups for the same base name and preserve their directory and timestamps.
- Open matching generations. Test copies from the same backup set before considering cross-pairing.
- Compare successful and failed records. Note whether all pointers fail or whether failure begins after a particular record or date.
- Check physical bounds. A referenced block beyond the end of the FPT cannot be read from that copy.
An FPT begins with control information including a next-free-block value and a block size. Memo blocks then carry a type and a length before their payload. Exact interpretation must follow the FoxPro generation; assuming a universal block size can make valid data appear corrupt.
Use known text as a validation anchor
If a user remembers a phrase from a note, search candidate FPT copies as binary data with an encoding-aware tool. A hit can establish that content exists, but it does not by itself prove that the candidate belongs to the DBF. Validate several memo pointers and records, not one convenient phrase.
Choose the least destructive recovery path
| Finding | Appropriate next step |
|---|---|
| A matching FPT opens all sampled memos | Document the pair, copy it to a controlled recovery set and export for validation. |
| Early memos work, later pointers exceed the file | Look for a newer or less truncated FPT backup; preserve the partial copy. |
| Blocks exist but pointers are inconsistent | Use specialist forensic tooling on copies and build a record-to-block report. |
| No companion can be found | Search full backups, old workstations and archives; the DBF alone usually cannot recreate memo payloads. |
Once a plausible pair is found, reconcile multiple records and export the notes into a derived format. Keep record identifiers beside memo text so that later migration does not depend on row order. The guide to DBF and memo file structure provides the underlying model.
Actions that reduce the chance of recovery
- Do not open the only copy in software that may update headers, indexes or memo allocation metadata.
- Do not append bytes, change a block-size field or rewrite pointers based on guesswork.
- Do not assume that equal filenames mean equal backup generations.
- Do not discard a partial FPT because some memos fail; earlier blocks may remain valuable.
If both the DBF and FPT show structural damage, separate the investigations. First establish DBF record boundaries using the corrupted header checklist, then map memo pointers from the recovered records.