var
  MS,MS2: TFileStream;
  Pic : TJpegImage;
  path:String;
begin
  path := IncludeTrailingBackslash(ExtractFilePath(Application.ExeName));
  MS := TFileStream.Create(path + '040824-1-14.jpg',fmOpenRead);
  MS2 := TFileStream.Create(path + 'new.jpg',fmCreate);
  MS.Seek(0, soFromBeginning);
  MS2.CopyFrom(MS,SizeOf(MS));
  FreeAndNil(MS);
  FreeAndNil(MS2);
end;040824-1-14.jpg'是有500多个字节的,为什么生成的new.jpg只有4个字节,请问上面程序是哪里出错啦?

解决方案 »

  1.   


    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      MS,MS2: TFileStream;
      Pic : TJpegImage;
      path:String;
    begin
      path := IncludeTrailingBackslash(ExtractFilePath(Application.ExeName));
      MS := TFileStream.Create(path + 'FlashImage.jpg',fmOpenRead);
      MS2 := TFileStream.Create(path + 'new.jpg',fmCreate);
      MS.Seek(0, soFromBeginning);
      MS2.CopyFrom(MS,ms.Size);
      FreeAndNil(MS);
      FreeAndNil(MS2);
    end;
      

  2.   

    MS2 := TFileStream.Create(path + 'new.jpg',fmCreate);
    再加个写的参数 试试
      

  3.   

    SizeOf(MS)和MS.Size似乎是不一样的。
      

  4.   

    MS2.CopyFrom(MS,SizeOf(MS));
    语句中ms对象实际是个指针,SizeOf(指针型变量)值等于4。
    ms流的大小应该用ms.size.
    MS2.CopyFrom(MS,ms.Size);
    这样就可以了。
      

  5.   

    function ICopyFile(SourceName,TargetName :string):Boolean;
    var
      Steam1,Stream2,Stream3 :TFileStream;
    begin
      Result := False;
      Steam1 := TFileStream.Create(SourceName,fmOpenRead);
      try
        Stream2 := TFileStream.Create(TargetName,fmOpenWrite or fmCreate);
        try
          Stream2.CopyFrom(Steam1,Steam1.Size);
          Result := True;
        finally
          Stream2.Free;
        end;
      finally
        Steam1.Free;
      end;
    end;
      

  6.   

    SizeOf(MS) 的结果是 存放变量MS的内存空间大小,和C中取指针占用空间大小一样,所以是4字节.
      

  7.   

    MS2.CopyFrom(MS,SizeOf(MS));  -> ms2.copyfrom(ms, ms.size)
      

  8.   

    应该把这句
    MS2.CopyFrom(MS,SizeOf(MS));
    中的SIZEOF(MS)改为
    ms.size.