Private
svrstream:TMemoryStream;Procedure Formcreate()
begin
svrstream:=TMemoryStream.create;
end;Procedure WritetoStream(tempf:Array Of byte;RecevicefLength: Integer;)
begin
svrstream.write(tempf,RecevicefLength);//这里报错 EAccessViolation
if svrstream.size>= myStreamsize then //myStreamsize是事先收到的流的大小
svrstream.savetofile(filename);
end;Procedure ServerSocketClientRead();
var
RceBuffer: Array[0..8191] Of byte; {设置接收缓冲区}
ReceviceLength: Integer;
begin
ReceviceLength:= Socket.ReceiveLength;
Socket.ReceiveBuf(RceBuffer, ReceviceLength);
WritetoStream(RceBuffer,ReceviceLength);
end;这是我的一个上传文件的部分代码,其他肯定不会错。在第一次上传文件的时候不会错,第二次再上传一个文件的时候,就要报错EAccessViolation,本人对TMemoryStream不是太熟,不知道错在哪,望哪个高手指点一下。
svrstream:TMemoryStream;Procedure Formcreate()
begin
svrstream:=TMemoryStream.create;
end;Procedure WritetoStream(tempf:Array Of byte;RecevicefLength: Integer;)
begin
svrstream.write(tempf,RecevicefLength);//这里报错 EAccessViolation
if svrstream.size>= myStreamsize then //myStreamsize是事先收到的流的大小
svrstream.savetofile(filename);
end;Procedure ServerSocketClientRead();
var
RceBuffer: Array[0..8191] Of byte; {设置接收缓冲区}
ReceviceLength: Integer;
begin
ReceviceLength:= Socket.ReceiveLength;
Socket.ReceiveBuf(RceBuffer, ReceviceLength);
WritetoStream(RceBuffer,ReceviceLength);
end;这是我的一个上传文件的部分代码,其他肯定不会错。在第一次上传文件的时候不会错,第二次再上传一个文件的时候,就要报错EAccessViolation,本人对TMemoryStream不是太熟,不知道错在哪,望哪个高手指点一下。
ClientSendStream:= TMemoryStream.Create;
ServerSendStream:= TMemoryStream.Create;
这应该没关系吧?
真是奇怪啊,反正TMemoryStream第二次使用就有问题,比如还有一个过程是下载文件。TMemoryStream类型的ServerSendStream在formcreate已经create
有一个过程是这样的
Procedure sendfile()
begin
ServerSendStream.clear;//这里报错
ServerSendStream.LoadFromFile(FileName);
end;
第一次执行时,也就是第一次下载一个文件时不会错,但第二次再执行时,就错了。我晕啊
即svrstream.position:=0试试看
或
SvrStream.Write(TempF[0], Length(TempF));试试~~