unit UOpenSave; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids,StrUtils;//添加StrUtils引用 type TFOpenSave = class(TForm) Memo1: TMemo; OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; BOpen: TButton; BSave: TButton; BExit: TButton; BNew: TButton; procedure BOpenClick(Sender: TObject); procedure BSaveClick(Sender: TObject); procedure BExitClick(Sender: TObject); procedure BNewClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var FOpenSave: TFOpenSave; CurFile:String; //表示系统中的当前文件的文件名 implementation {$R *.dfm} procedure TFOpenSave.BOpenClick(Sender: TObject); var FileHandle: Integer; //文件句柄 FileLength: Integer; //文件长度 BytesRead: Integer; Buffer: PChar; begin if OpenDialog1.Execute then begin //读取文件内容,并在TMemo组件中显示 try //将要打开的文件的文件名设置为当前文件名 CurFile := OpenDialog1.FileName; FileHandle := FileOpen(CurFile, fmOpenRead); FileLength := FileSeek(FileHandle,0,2); FileSeek(FileHandle,0,0); //如果文件的长度超过了TMemo组件所能显示的字符数的最大值,则对其进行截取 if FileLength > Memo1.MaxLength then FileLength := Memo1.MaxLength ; //分配缓冲区,用于保存文件中的数据 Buffer := PChar(AllocMem(FileLength + 1)); BytesRead := FileRead(FileHandle, Buffer^, FileLength); FileClose(FileHandle); //将缓冲区中的数据显示在TMemo组件中 Memo1.Text :=Buffer; finally FreeMem(Buffer); //释放缓冲区 end; end; //if end; procedure TFOpenSave.BSaveClick(Sender: TObject); var FileLength: Integer; //写入的文件的长度 IfLoop:Boolean; //判断是否已选择到合适的文件名 FileHandle: Integer; //文件句柄 Buffer: PChar; MText: String; begin IfLoop :=True; if CurFile='' then while IfLoop do begin IfLoop :=False; if SaveDialog1.Execute then begin CurFile:= SaveDialog1.FileName ; if not AnsiContainsStr(CurFile,'.') then CurFile := CurFile +'.txt'; //添加文件名后缀 if FileExists(SaveDialog1.FileName) then begin if MessageDlg('您所指定的文件已存在,是否替换?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then IfLoop:=True; //如果要重新选择,则再次弹出文件保存对话框 end ; end ;//if SaveDialog1.Execute then end; //while //分配缓冲区 MText := Memo1.Text; FileLength := Length(MText); Buffer := PChar(AllocMem(FileLength + 1)); StrPCopy(Buffer,MText); //保存文件 try FileHandle := FileCreate(CurFile); FileWrite(FileHandle, Buffer^, FileLength); FileClose(FileHandle); finally FreeMem(Buffer); //释放缓冲区 end; end; procedure TFOpenSave.BExitClick(Sender: TObject); begin Application.Terminate; end; procedure TFOpenSave.BNewClick(Sender: TObject); begin Memo1.Text :=''; CurFile :=''; end; end.