procedure TfrmMain.btnSendFileClick(Sender: TObject);
var
   Size: Integer;
   Buffer: PChar;
   StrLength: integer;
begin
   if Self.OpenDialog.Execute then
   begin
      FStream.LoadFromFile(OpenDialog.FileName);
      FStream.Position := 0;
      Size := FStream.Size;
      strlength:=Length(OpenDialog.FileName);
      Inc(Size, strlength+5);
      GetMem(Buffer, Size + 1);
      FStream.Read(Buffer[strlength+4], Size - 5);
      Buffer[0] := 'f';
      Buffer[1] := 'i';
      Buffer[2] := 'l';
      Buffer[3] := 'e';
      strpcopy(buffer[4],opendialog.FileName);
      Buffer[Size - 1] := 'E';
      Buffer[Size] := #0;
      if ssServer.Socket.ActiveConnections > 0 then
      begin
       ssServer.Socket.Connections[0].SendBuf(Buffer^, Size);
      end;
      FreeMem(Buffer);
   end;
end;
   我想用socket发送文件,buffer中前4位存的是"file",后面紧接着存入文件名称,然后在存文件内容.以上是我写的一段代码.但是有问题,文件名称不知如何存储.请各位高手帮忙.

解决方案 »

  1.   

    procedure TfrmMain.btnSendFileClick(Sender: TObject);
    var
       Size: Integer;
       Buffer: PChar;
       StrLength: integer;
       strFileName: string;
       FS: TFileStream;
    begin
       if Self.OpenDialog.Execute then
       begin
          FStream := TMemoryStream.Create;
          //先存 "file"
          strFileName = 'file';
          FStream.Write(strFileName[1], Length(strFileName));
          //再存文件名
          strFileName := OpenDialog.FileName;
          FStream.Write(strFileName[1], Length(strFileName));
          //再存文件内容
          FS := TFileStream.Create(strFileName, ....(mode自己去查吧,忘了)...);
          FStream.CopyFrom(FS, FS.Size);      //.........end;
      

  2.   

    buf: array of byte;setlength(buf, FStream.size)
    FStream.Read(buf, FStream.Size);然后再发送
      

  3.   

    或者用你的方式也行strFileName := opendialog.FileName;把StrPCopy改成:
    CopyMemory(@Buf[4], @strFileName[1], Length(strFileName)); //好象可以这样吧
      

  4.   

    CopyMemory(@Buf[4], @strFileName[1], Length(strFileName));