p; 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 ? 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, DeleteFile Example ##FileExists, RenameFile, FileCreate, FileWrite, FileClose, ExtractFileName Example ----------------------------------------------------------------------------- FileOpen 开档. ----------------------------------------------------------------------------- Unit SysUtils 函数原型 function FileOpen(const FileName: string; Mode: Integer):Integer; **** 开档失败传回-1. 说明 以下有关档案读取都属低阶,如Dos Int 21h中有关档案的部 分. fmOpenRead = $0000; fmOpenWrite = $0001; fmOpenReadWrite = $0002; fmShareCompat = $0000; fmShareExclusive = $0010; fmShareDenyWrite = $0020; fmShareDenyRead = $0030; fmShareDenyNone = $0040;
fmOpenRead Open for read access only. FmOpenWrite Open for write access only. FmOpenReadWrite Open for read and write access. fmShareCompat Compatible with the way FCBs are opened. fmShareExclusive Read and write access is denied. fmShareDenyWrite Write access is denied. fmShareDenyRead Read access is denied. fmShareDenyNone Allows full access for others. 范例 procedure OpenForShare(const FileName: String); var FileHandle : Integer; begin FileHandle := FileOpen(FileName, fmOpenWrite or fmShareDenyNone); if FileHandle > 0 then {valid file handle} else {Open error: FileHandle = negative DOS error code} end; 范例 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 ----------------------------------------------------------------------------- FileCreate 建档 ----------------------------------------------------------------------------- Unit SysUtils 函数原型 function FileCreate(const FileName: string): 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 ? 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 ----------------------------------------------------------------------------- FileClose 关档 ----------------------------------------------------------------------------- Unit SysUtils 函数原型 procedure FileClose(Handle: Integer); 范例 procedure TForm1.Button1Click(Sender: TObject); var BackupName: string; FileHandle: Integer; StringLen: Integer; X: Integer; Y: Integer; begin if SaveDialog1.Execute then begin if Fil