Si la longitud de los campos es fija, y podemos rellenar los huecos con espacios, prueba con esto:
Código Delphi
[-]
type
TPerson = packed record
DNI: array[0..8] of AnsiChar;
Nombre: array[0..39] of AnsiChar;
end;
var
Person: TPerson;
Nombre: AnsiString;
f1: TextFile;
f2: file;
begin
FillChar(Person,SizeOf(TPerson),#32);
move(PAnsiChar('12345678Z')^,Person.DNI,9);
Nombre:= 'Pepe Perez';
move(PAnsiChar(Nombre)^,Person.Nombre,Length(Nombre));
AssignFile(f1,'E:\1.txt');
Rewrite(f1);
Writeln(f1,Copy(PAnsiChar(@Person),1,SizeOf(TPerson)));
CloseFile(f1);
AssignFile(f2,'E:\2.txt');
Rewrite(f2,1);
BlockWrite(f2,Person,Sizeof(Person));
CloseFile(f2);
end.