eExists(SaveDialog1.FileName) then begin BackupName := ExtractFileName(SaveDialog1.FileName); BackupName := ChangeFileExt(BackupName, ''''.BAK''''); if not RenameFile(SaveDialog1.FileName, BackupName) then raise Exception.Create(''''Unable to create backup file.''''); end; FileHandle := FileCreate(SaveDialog1.FileName); { Write out the number of rows and columns in the grid. } FileWrite(FileHandle, StringGrid1.ColCount, SizeOf(StringGrid1.ColCount)); FileWrite(FileHandle, StringGrid1.RowCount, SizeOf(StringGrid1.RowCount)); for X := 0 to StringGrid1.ColCount ? 1 do begin for Y := 0 to StringGrid1.RowCount ? 1 do begin { Write out the length of each string, followed by the string itself. } StringLen := Length(StringGrid1.Cells[X,Y]); FileWrite(FileHandle, StringLen, SizeOf(StringLen)); FileWrite(FileHandle, StringGrid1.Cells[X,Y], Length(StringGrid1.Cells[X,Y]); end; end; FileClose(FileHandle); end; end; ##FileExists, RenameFile, FileCreate, FileWrite, FileClose, ExtractFileName Example
============================================ **** 它是以Handle为叁数. ============================================ FileRead 读取档案 ----------------------------------------------------------------------------- Unit SysUtils 函数原型 function FileRead(Handle: Integer; var Buffer; Count: Integer):Integer; 范例 procedure TForm1.Button1Click(Sender: TObject);
var iFileHandle: Integer; iFileLength: Integer; iBytesRead: Integer; Buffer: PChar; i: Integer begin if OpenDialog1.Execute then begin try iFileHandle := FileOpen(OpenDialog1.FileName, fmOpenRead); iFileLength := FileSeek(iFileHandle,0,2); FileSeek(iFileHandle,0,0); Buffer := PChar(AllocMem(iFileLength + 1)); iBytesRead = FileRead(iFileHandle, Buffer, iFileLength); FileClose(iFileHandle); for i := 0 to iBytesRead-1 do begin StringGrid1.RowCount := StringGrid1.RowCount + 1; StringGrid1.Cells[1,i+1] := Buffer[i]; StringGrid1.Cells[2,i+1] := IntToStr(Integer(Buffer[i])); end; finally FreeMem(Buffer); end; end; end; ##FileOpen, FileSeek, FileRead Example ----------------------------------------------------------------------------- FileWrite 写入档案 ----------------------------------------------------------------------------- Unit SysUtils 函数原型 function FileWrite(Handle: Integer; const Buffer; Count: Integer): Integer; 范例 procedure TForm1.Button1Click(Sender: TObject); var BackupName: string; FileHandle: Integer; StringLen: Integer; X: Integer; Y: Integer; begin if SaveDialog1.Execute then begin if FileExists(SaveDialog1.FileName) then begin BackupName := ExtractFileName(SaveDialog1.FileName); BackupName := ChangeFileExt(BackupName, ''''.BAK''''); if not RenameFile(SaveDialog1.FileName, BackupName) then raise Exception.Create(''''Unable to create backup file.''''); end; FileHandle := FileCreate(SaveDialog1.FileName); { Write out the number of rows and columns in the grid. } FileWrite(FileHandle, StringGrid1.ColCount, SizeOf(StringGrid1.ColCount)); FileWrite(FileHandle, StringGrid1.RowCount, SizeOf(StringGrid1.RowCount)); for X := 0 to StringGrid1.ColCount do begin for Y := 0 to StringGrid1.RowCount do begin { Write out the length of each string, followed by the string itself. } StringLen := Length(StringGrid1.Cells[X,Y]); FileWrite(FileHandle, StringLen, SizeOf(StringLen)); FileWrite(FileHandle, StringGrid1.Cells[X,Y], Length(StringGrid1.Cells[X,Y]);//?????????/ end; end; FileClose(FileHandle); end; end; ##FileExists, RenameFile, FileCreate, FileWrite, FileClose, ExtractFileName Example ----------------------------------------------------------------------------- FileSeek 移动档案指标位置 ----------------------------------------------------------------------------- Unit SysUtils 函数原型 function FileSeek(Handle, Offset, Origin: Integer): Integer; 说明 Origin=0读/写指标由档案开头算起. Origin=1读/写指标由目前位置算起. Origin=2读/写指标移动到档案结束处. **** 功能与Dos Int 21h 插断 42h 的功能相同. 失败传回-1. 范例 procedure TForm1.Button1Click(Sender: TObject); var FileHandle : Integer; FileName : String; Buffer : PChar; S : String; ReadBytes : Integer; begin FileName:=''''c:\delphi_test\abc.ttt''''; S:=''''1234567890''''; if FileExists(FileName) then FileHandle := FileOpen(FileName, fmOpenReadWrite) else FileHandle := FileCreate(FileName); if FileHandle < 0 then Begin MessageDlg(''''开档失败'''', mtInformation, [mbOk], 0); Exit; End;