var
  FStrm1,FStrm2:TFileStream;
begin
  FStrm1:=TFileStream.Create('c:\123.dat',fmOpenread);
  FStrm2:=TFileStream.Create('\\cc1\f\1.txt',fmCreate);
  FStrm2.CopyFrom(FStrm1,FStrm1.Size);
  FStrm1.Free;
  FStrm2.Free;
end;
我用这个方式拷贝文件,我本来想用copyfile的,但是copyfile好像不支持局域网拷贝。所以我用流,文件123.dat是一个30兆以上的文件,但是每次拷贝到27.X兆的时候,就弹出一个错误,好像是缓冲区溢出的意思,怎么办啊,是不是要定义一个缓冲变量什么的,教教我,给我一个具体的例子吧,

解决方案 »

  1.   

    CopyFile是支持局域网的阿,
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if CopyFile('C:\A.dll',Pchar('\\192.168.1.82\sss\Y004_A.dll'),  false) then
        ShowMessage('OK');
    end;
      

  2.   

    以下是我做的一个简单文件拷贝:
    unit S6_1_u;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls, ComCtrls, XPMan, Gauges;type
      TForm1 = class(TForm)
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
        OpenDialog1: TOpenDialog;
        SaveDialog1: TSaveDialog;
        Label4: TLabel;
        Timer1: TTimer;
        ProgressBar1: TProgressBar;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure Button3Click(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      OpenDialog1.Title:='源文件';
      if OpenDialog1.Execute then
        Edit1.Text:=OpenDialog1.FileName;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      ExtName:String;
    begin
      SaveDialog1.Title:='另存为';
      SaveDialog1.FileName:=ExtractFileName(Edit1.Text);
      SaveDialog1.Filter:=ExtractFileExt(Edit1.Text);
      ExtName:=ExtractFileExt(Edit1.Text);
      Delete(ExtName,1,1);
      SaveDialog1.DefaultExt:=ExtName;
      if SaveDialog1.Execute then
      begin
        if FileExists(SaveDialog1.FileName) then
        begin
          if messagedlg('文件名相同,是否复盖?',mtinformation,[mbYes,mbNo],0)=mrYes then
          begin
              Edit2.Text:=SaveDialog1.FileName;
          end
        end
        else
              Edit2.Text:=SaveDialog1.FileName;
      end;
    end;procedure TForm1.Button4Click(Sender: TObject);
    begin
      Close;
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action:=caFree;
    end;procedure TForm1.Button3Click(Sender: TObject);
      var
        FromF,ToF:file;
        NumRead,NumWriten:Integer;
        Buf: array[1..2048] of Char;
    begin
      ProgressBar1.Visible:=True;
      Button4.Enabled:=False;
      Button3.Width:=150;
      Button3.Caption:='  正在拷贝...';
      AssignFile(FromF,Edit1.Text);
      Reset(FromF,1);
      AssignFile(ToF,Edit2.Text);
      Rewrite(ToF,1);
      Edit3.Text:=IntToStr(FileSize(FromF))+'字节';
      ProgressBar1.Max:=FileSize(FromF);
      ProgressBar1.Min:=0;
      ProgressBar1.Step:=SizeOf(Buf);
      repeat
        BlockRead(FromF,Buf,SizeOf(Buf),NumRead);
        BlockWrite(ToF,Buf,NumRead,NumWriten);
        ProgressBar1.StepIt;
      until (NumRead=0) or (NumWriten<>NumRead);
      messagedlg('拷贝完成!',mtinformation,[mbOK],0);
      CloseFile(FromF);
      CloseFile(ToF);
      Button4.Enabled:=True;
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    begin
        if Edit1.Text<>'' then
        begin
          Edit2.Enabled:=True;
          Edit3.Enabled:=True;
          Button2.Enabled:=True;
        end;
        if (Edit1.Text<>'')and(Edit2.Text<>'')then
        Button3.Enabled:=True;
          
    end;end.