为什么从流中取的值服不到动态数组中(100)

  • 主题发起人 主题发起人 dxiaoliang
  • 开始时间 开始时间
D

dxiaoliang

Unregistered / Unconfirmed
GUEST, unregistred user!
Function TForm1.Jmf_AddtoFile(SourceFile,PassWord,TargetFile:String):Boolean;var Target:TFileStream; Source:TFileStream; MyFileSize,PassWordSize:integer; ys: TCompressionStream; sor: integer;//不能被整除的余数 i:integer; sorsize:integer; intcount:integer; intbuf: integer; outbuf: integer; xxx:array of Byte; //buf:pointer;Begin Try Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareDenyNone ); Target:=TFileStream.Create(TargetFile,fmCreate); sorsize:= source.Size; setlength(xxx,sorsize); Try sorsize:= source.Size; setlength(xxx,sorsize); Source.Seek(0,soFrombeginning); Source.Read(xxx,sizeof(xxx));//不能够获得数据, for i:=0 to Source.Size do begin xxx:=xxx xor $FF; end; Target.WriteBuffer(xxx,sizeof(xxx));动态数组是否写的有问题高手帮忙看看啊
 
帮忙看看啊 分不够可以再给 Source.Read(xxx,sizeof(xxx));//不能够获得数据
 
Source.Read(xxx,sizeof(xxx));//不能够获得数据, read是从动态数组里读内容,当然不能获得数据,要write到xxx里
 
给你一个案例,测试通过的。procedure TForm1.Button1Click(Sender: TObject);var Source: TFileStream; sorsize, i: integer; xxx: array of Byte; S: string;begin Source := TFileStream.Create('c:/AA.txt', fmOpenRead or fmShareDenyNone); sorsize := source.Size; setlength(xxx, sorsize); Source.Seek(0, soFrombeginning); Source.Read( xxx[0], Length(xxx)); //更改为XXX[0]和 Length for i := 0 to Source.Size - 1 do S := S + Chr(xxx); Caption := S; Source.Free;end;---------------------------- for i := 0 to Source.Size - 1 do 最好更改为 for I:=Low(xxx) to High(xxx) do
 
znxia 正解; 首地址 静态数组 XXX 或 XXX[0] 两种表示都可以 动态数组 XXX[0] 只能用这一种 xxx 只是一个指向, 类似指针 SizeOf(xxx)) = SizeOf(Pointer) = 4; 应该是 Length(xxx) * SizeOf(Byte) = Length(xxx) * 1 = Length(xxx);
 
谢谢 liuls的解答,问题我已经解决 和您说的一样,对流操作比较的生疏
 
多人接受答案了。
 
后退
顶部