Well, what does better mean? With the procedural you have more magic, e.g.
var
fl: TextFile;
begin
AssignFile(fl, 'filename');
Rewrite(fl);
WriteLn(fl, 42, ' Hello World', True, 3.14, enSomeEnumValue); // Writes an integerm string, boolean, float and enum value with a single command
end;
This is simply not possible with streams.
Streams are therefore compatible with other streams:
var
fs: TFileStream;
ms: TMemoryStream;
ss: TSocketStream;
sl: TStringList;
begin
...
sl.LoadFromFile(fs); // No matter the type of stream, one method can use all
sl.LoadFromFile(ms); // No matter the type of stream, one method can use all
sl.LoadFromFile(ss); // No matter the type of stream, one method can use all
Also I personally like the subject.verb(objects) syntax more than the classical verb(subject, objects), as it is more closely to natural language.
I personally like the TStream based handling more, first I'm not a big fan of compiler magic, and file handling is full of it (not just the magic Read and Write function family, but also the type itself is heaviely abstracted by the compiler), and I just like when I use concepts where I know that I could build them myself if I wanted (e.g. if I needed some special functionality).
Also I think that it's clearer what they do when you write TFileStream.Create(name, mode), rather than having to first AssignFile and then using either Rewrite, Append or Reset. I don't like the concept of creating an object (using AssignFile), but that it is after creation still in an undefined state and I first need to do a second operation on it.
I like to have one function that does all the construction and initialization in one