As so many have said before classes are pointers so if your file is of type TTile it's the same as saying f: File of Pointer; and it just won't work. Instead you can just use f: File;

A small (untested!) way of saving a tile map would be:

[pascal]

type
TTile = class
public
CanWalkOn: Boolean;
Image: Integer;
procedure SaveToFile(var f: File);
procedure LoadFromFile(var f: File);
end;

TTileMap = class
public
Tiles: array[0..9, 0..9] of TTile;
procedure SaveToFile(const FileName: String);
procedure LoadFromFile(const FileName: String);
procedure Clear;
end;

{...}

procedure TTile.SaveToFile(var f: File);
begin
try
BlockWrite(f, CanWalkOn, SizeOf(CanWalkOn));
BlockWrite(f, Image, SizeOf(Image));
except
// something went wrong
end;
end;

procedure TTile.LoadFromFile(var f: File);
begin
try
BlockRead(f, CanWalkOn, SizeOf(CanWalkOn));
BlockRead(f, Image, SizeOf(Image));
except
// something went wrong
end;
end;

procedure TTileMap.SaveToFile(const FileName: String);
var
f: File;
x,y: Integer;
begin
AssignFile(f, FileName);
try
Rewrite(f);
for y := 0 to 9 do
for x := 0 to 9 do
begin
Tiles[x,y].SaveToFile(f);
end;
finally
CloseFile(f);
end;
end;

procedure TTileMap.Clear;
var
x,y: Integer;
begin
for x := 0 to 9 do
for y := 0 to 9 do
begin
if Assigned(Tiles[x,y]) then
begin
Tiles[x,y].Free;
Tiles[x,y] := nil;
end;
end;
end;

procedure TTileMap.LoadFromFile(const FileName: String);
var
f: File;
x,y: Integer;
begin
Clear;
AssignFile(f, FileName);
try
Reset(f);
for y := 0 to 9 do
for x := 0 to 9 do
begin
Tiles[x,y] := TTile.Create;
Tiles[x,y].LoadFromFile(f);
end;
finally
CloseFile(f);
end;
end;

[/pascal]