It is because you have misunderstood something.
A
string is not a simple POD type -- it is an
object type -- which you cannot write directly to file (according to Delphi standards [and also ISO standards, but that's beside the point

]).
The
write[
ln] functions know how to transform a
string into a simple sequence of characters.
They do not know how to handle your
thing type, because it has a non-POD member (the string).
When you create
file types, they must be sequences of non-object types. Hence,
type tFooFile: file of string; fails, where
type
string80: array[ 1..80 ] of char;
tFooFile: file of string80;
succeeds.
What you can do is write procedures/methods that know how to write your non-POD type to a given file, then call it when you wish to write it.
For more information, google around "delphi or pascal object serialization".
Hope this helps.