Delphi 提供三層文件操作抽象:傳統 Pascal 文件變量、Windows API 文件句柄、VCL 文件流類,層級越高封裝越完善但靈活度遞減。
TextFile、File of Record、無類型 FileAssignFile、Reset/Rewrite、Read/Write/Readln/Writeln、CloseFilevar F: TextFile; S: string;
begin
if OpenDialog1.Execute then begin
AssignFile(F, OpenDialog1.FileName);
Reset(F); Readln(F, S); Edit1.Text := S; CloseFile(F);
end;
end;
THandle (即 Integer)CreateFile、ReadFile/WriteFile、CloseHandle、GetOverlappedResult同步讀偽碼:
bResult = ReadFile(hFile, @inBuffer, nBytesToRead, @nBytesRead, nil);
if (bResult and nBytesRead = 0) then {EOF} ...
異步讀偽碼:需初始化 OVERLAPPED 結構,調用 ReadFile 返回 ERROR_IO_PENDING 後繼續做其他事,稍後 GetOverlappedResult 取結果。
TFileStream (繼承 TStream)Read/Write/Seek/Position/Size),易與 TMemoryStream、TBlobStream 等互操作,內部封裝 Handle 屬性可訪問底層句柄var FS: TFileStream; MS: TMemoryStream;
begin
FS := TFileStream.Create('data.bin', fmCreate);
MS := TMemoryStream.Create;
try
MS.LoadFromFile('source.dat');
FS.CopyFrom(MS, 0); {內存流直接寫入文件流}
finally
MS.Free; FS.Free;
end;
end;
| 場景 | 推薦類型 |
|---|---|
| 簡單文本/記錄讀寫 | Pascal 文件變量 |
| 需異步 I/O、文件鎖、大文件隨機訪問 | Windows 句柄 |
| 流式處理、與其他流互操作、對象化設計 | TFileStream |