Files, Streams and the File System
31.1 System.IOUtils (Modern)
uses System.IOUtils, System.Types;
TFile.WriteAllText('notes.txt', 'Hello', TEncoding.UTF8);
TFile.AppendAllText('notes.txt', sLineBreak + 'More');
var Text := TFile.ReadAllText('notes.txt');
var Lines := TFile.ReadAllLines('notes.txt');
TFile.WriteAllBytes('data.bin', Bytes);
if TFile.Exists('notes.txt') then
begin
TFile.Copy('notes.txt', 'backup.txt', True);
TFile.Move('backup.txt', TPath.Combine('archive', 'backup.txt'));
TFile.Delete('notes.txt');
end;
TDirectory.CreateDirectory('output\reports');
for var F in TDirectory.GetFiles('C:\Data', '*.csv', TSearchOption.soAllDirectories) do
Writeln(TPath.GetFileName(F));
var Docs := TPath.GetDocumentsPath; // cross-platform (important on mobile)
var Tmp := TPath.GetTempFileName;
var Full := TPath.Combine(TPath.GetHomePath, 'myapp.ini');
Writeln(TPath.GetExtension(Full), ' ', TPath.GetFileNameWithoutExtension(Full));31.2 Streams
Abstract base (Read, Write, Seek, Position, Size, CopyFrom)
Files (fmCreate, fmOpenRead, fmShareDenyWrite) String ↔ stream with encoding TBytes buffer TBufferedFileStream (10.1+) Buffered file I/O
TZCompressionStream / TZDecompressionStream TStreamReader / TStreamWriter Text reading/writing with encoding TBinaryReader / TBinaryWriter Typed binary I/O
var FS := TFileStream.Create('data.bin', fmCreate);
try
var W := TBinaryWriter.Create(FS);
try
W.Write(Integer(42)); W.Write(3.14); W.Write('text');
finally
W.Free;
end;
finally
FS.Free;
end;
var Reader := TStreamReader.Create('big.log', TEncoding.UTF8);
try
while not Reader.EndOfStream do
if Reader.ReadLine.Contains('ERROR') then Inc(ErrorCount);
finally
Reader.Free;
end;31.3 INI Files, Registry and Legacy File I/O
uses System.IniFiles, System.Win.Registry;
var Ini := TMemIniFile.Create(TPath.Combine(TPath.GetDocumentsPath, 'app.ini'), TEncoding.UTF8);
try
Ini.WriteString('Database', 'Server', 'localhost');
var Port := Ini.ReadInteger('Database', 'Port', 5432);
Ini.UpdateFile;
finally
Ini.Free;
end;
var Reg := TRegistry.Create(KEY_READ); // Windows only
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKeyReadOnly('Software\MyApp') then Writeln(Reg.ReadString('Theme'));
finally
Reg.Free;
end;
// Classic Pascal text files (legacy)
var F: TextFile;
AssignFile(F, 'old.txt'); Rewrite(F);
try Writeln(F, 'line'); finally CloseFile(F); end;